需求:多进程使用 mysqldump 分表逻辑备份 mysql.
开始使用 gnu parallel 来进行多进程备份,发现如果有一个进程备份时间久的话,会卡住已完成的进程等待这个进程. 不太了解 prarllel,所以考虑用 python multiprocessing.pool 来管理进程,目的是尽快的分配任务让多核来完成任务. if name == 'main': result = list() with open(sys.argv[1],'r') as o: lines = csv.reader(o) for line in lines: result.append(line) p = Pool(5) for i in result: p.apply_async(run,(i,)) p.close() p.join()
使用以上方式直接创建 pool,在 run 里使用 os.system 调用 mysqldump 执行备份工作.测试发现, 1234 进程已经完成备份,5 还未完成. 在这种情况下,1234 进程在等待 5 的完成, 并不是理想中的继续接任务执行.
求解惑,这是什么情况? 如何能实现我的需求. 如果用 queue 在 run 函数中读取队列,能否实现?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.