【发布时间】:2018-12-04 22:07:53
【问题描述】:
我有一个很长的列表data,假设它看起来像这样:
[(a, a, 1),
(b, b, 1),
(c, c, 1),
(d, d, 1),
(e, e, 1),
(f, f, 1),
(g, g, 1),
(h, h, 1),
(i, i, 1),]
我正在尝试如下使用多线程:
from multiprocessing.dummy import Pool as ThreadPool
pool = ThreadPool(4)
pool.starmap(help_func, data)
Help_func如下:
def help_func(in_vala, in_valb, in_valc):
print("asking for " + str(in_vala) + " asking for " + str(in_valb))
receiver(in_vala)
接收器是一个简单的测试函数:
def receiver(group):
print(group)
当我运行我的程序时,我可以看到 help_func 的输出是正确的,即它枚举了 data 的值。
但是,当我查看在接收器()处生成的值时,我注意到一些奇怪的打印,如下所示:
a
b
c
de
e
f
gh
i
我很难理解为什么会出现这种情况。调用receiver的时候出了点问题,可能是receiver带来的non-blocking可能吧?
我应该如何解决这个问题。
另外,当我使用 ThreadPool(1) 时,我没有看到这个问题。我的实际问题有一个更大的函数,它是从 help_func 调用的,所以我想理想地在多个线程下运行它。
【问题讨论】:
标签: python-3.x multiprocessing threadpool