提问人:J. Doe 提问时间:10/6/2023 最后编辑:wjandreaJ. Doe 更新时间:10/6/2023 访问量:134
__main__上的 Python 全局变量
Python global variable on __main__
问:
由于需要将多处理放在 Windows 中,我发现我的全局变量没有传递给我的函数。__main__
from multiprocessing import Pool, Value
def Proses(lines):
global xyz
try:
print(lines)
print(xyz)
except Exception as e:
print(e)
def counter_handler(args):
global counter
counter = args
def Dosomething():
a = [i for i in range(10)]
return a
if __name__ == '__main__':
# i want to share xyz variable
xyz = Dosomething()
threads = []
data = ["bjir", "bjir", "bjir"]
counter = Value('i', 0)
with Pool(1) as pool:
p = Pool(1, initializer=counter_handler, initargs=(counter,))
i = p.map_async(Proses, data, chunksize=1)
i.wait()
一直在寻找几个小时,但仍然没有线索,我认为这可能是一个重复的问题,我知道,但我仍然找不到任何答案。有没有办法将我的变量传递给我的函数?xyz
答:
0赞
Andrej Kesely
10/6/2023
#1
正如您在示例中所写的,has 和 参数,您也可以使用它们来初始化全局变量:Pool
initializer=
initargs=
from multiprocessing import Pool, Value
def Proses(lines):
global xyz
print(lines)
print(xyz)
def Dosomething():
a = [i for i in range(10)]
return a
def init_pool(a, cnt):
global xyz, counter
xyz = a
counter = cnt
if __name__ == "__main__":
# i want to share xyz variable
xyz = Dosomething()
data = ["bjir", "bjir", "bjir"]
counter = Value("i", 0)
with Pool(1, initializer=init_pool, initargs=(xyz, counter)) as pool:
i = pool.map_async(Proses, data, chunksize=1)
i.wait()
指纹:
bjir
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
bjir
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
bjir
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
评论
0赞
J. Doe
10/6/2023
我使用了 functoin counter_handler因为我的程序需要一个计数器,所以我可以;删除该部分。 我尝试在 initargs 上传递 2 个变量,但它仍然没有定义
1赞
Andrej Kesely
10/6/2023
@J.Doe 我已经更新了我的答案。
评论
xyz = Dosomething()
if