python - python中的multiprocessing.process,用于使用共享队列中的值的并行进程
问题描述
我正在尝试利用 python 多处理池从共享队列中获取值并在工作进程中使用。
import multiprocessing
def myTask(queue):
while not queue.empty():
value = queue.get()
print "Process {} Popped {} from the shared Queue".format(multiprocessing.current_process().pid, value)
queue.task_done()
def main():
m = multiprocessing.Manager()
sharedQueue = m.Queue()
sharedQueue.put(2)
sharedQueue.put(3)
sharedQueue.put(4)
sharedQueue.put(5)
sharedQueue.put(6)
pool = multiprocessing.Pool(processes=3)
pool.apply_async(myTask, args=(sharedQueue,))
pool.close()
pool.join()
if __name__ == '__main__':
main()
从我得到的输出中,我看到只启动了一个进程,将所有值从队列中取出。如何并行生成多个进程,不断从队列中获取值。我对可能大于队列大小的进程数有最大限制。请在这方面指导我。谢谢。
PS:这只是一个例子。实际任务是将数据从一种形式迁移到另一种形式,并对数据进行一些繁重的操作。
更新:我做了以下修改,它们似乎工作,除了 pool.join() 阻止主进程退出,即使所有子进程都退出。
pool = multiprocessing.Pool(processes=4)
while not sharedQueue.empty():
pool.apply_async(myTask, args=(sharedQueue,))
pool.close()
#pool.join()
def myTask(queue):
value = queue.get()
print "Process {} Popped {} from the shared Queue".format(multiprocessing.current_process().pid, value)
queue.task_done()
解决方案
推荐阅读
- dart - Flutter 将记录的用户数据获取到其他屏幕视图
- multithreading - 两个设备之间的 UART 通信如何工作?
- c# - 我想在 Windows 上构建一个 .net 核心项目
- ffmpeg - FFmpeg noob:裁剪和堆叠视频
- spring - 如何使用spring cloud在不重启的情况下发现服务的所有restApi
- javascript - 如何在 TestCafe 中删除样式属性
- xml - Loopback XML 正文数据验证错误问题
- r - 为什么在没有括号的情况下运行切片时返回 NA?
- android - RingtonePreference 无法在 android 8.1 上添加新铃声
- html - 输入元素切割为 4 行