多进程处理数据时如何完整打印?

2021-01-12 11:06:07 +08:00
 oldbird

from multiprocessing import Pool

def do(item):

	print item

	...... #处理 txt (每个大概 5 分钟)

if name=='main':

	items=glob.glob('*.txt')

	pool=Pool(5)

	pool.map(do,items)

	pool.close()

	pool.join()

items 为['1111.txt','2222.txt','3333.txt','4444.txt','5555.txt',......'9999.txt']

运行时会穿插打印,比如 111221.33txt

是否有办法将每项打印完整?

2089 次点击
所在节点    Python
8 条回复
maocat
2021-01-12 11:06:55 +08:00
上锁,改同步
crackhopper
2021-01-12 11:14:19 +08:00
还可以用 queue,有个线程安全的 queue,用 multiprocessing.Manager,上面带了一个 queue 。
BrokenVns
2021-01-12 11:14:23 +08:00
再启动一个日志进程,通过 socket 把每个进程的日志发送过去,由日志进程汇总打印。
UN2758
2021-01-12 11:56:25 +08:00
可以用带队列功能的日志,比如 loguru
VYSE
2021-01-12 12:11:58 +08:00
jones2000
2021-01-12 14:18:26 +08:00
还不如每个进程一个日志文件, 每行日志加时间戳,最后显示的时候读多个文件日志,根据时间戳排序下。 省事
oldbird
2021-02-28 08:52:23 +08:00
@jones2000 请问每个进程一个日志该怎么写? 目前只会对每个进程中的每个处理文件一个日志……
jones2000
2021-02-28 13:49:46 +08:00
@oldbird 我直接用 log4net 插件, 它有统一的写日志的接口.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/744101

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX