通过写入python文件跟踪多处理中的事件状态
我正在处理一个需要用python进行多处理的任务,我需要通过将已处理的文档ID写入一个文件(进程之间共享的单个文件)来跟踪状态 我使用下面的代码片段实现了一个简单的版本。在代码中,我将一些ID存储在一个名为通过写入python文件跟踪多处理中的事件状态,python,python-3.x,multithreading,multiprocessing,Python,Python 3.x,Multithreading,Multiprocessing,我正在处理一个需要用python进行多处理的任务,我需要通过将已处理的文档ID写入一个文件(进程之间共享的单个文件)来跟踪状态 我使用下面的代码片段实现了一个简单的版本。在代码中,我将一些ID存储在一个名为question的变量中,该变量是共享文件f,在main方法中,我将question拆分为可以并行处理的可能块 这样做对吗 from multiprocessing import Pool from multiprocessing import Queue def reader(val):
question
的变量中,该变量是共享文件f
,在main方法中,我将question
拆分为可以并行处理的可能块
这样做对吗
from multiprocessing import Pool
from multiprocessing import Queue
def reader(val):
pqueue.put(val)
def writer():
a = pqueue.get()
f = open("num.txt",'a')
f.write(str(a))
f.write("\n")
f.close()
def main():
global question
global pqueue
pqueue = Queue() # writer() writes to pqueue from _this_ process
processes = []
question = [16,0,1,2,3,4,5,6,7,8,10,11,12,13,14,15]
cores=5
loww=0
chunksize = int((len(question)-loww)/cores)
splits = []
for i in range(cores):
splits.append(loww+1+((i)*chunksize))
splits.append(len(question)+1)
print(splits)
args = []
for i in range(cores):
a=[]
arguments = (i, splits[i], splits[i+1])
a.append(arguments)
args.append(a)
print(args)
p = Pool(cores)
p.map(call_process, args)
p.close()
p.join
def call_process(args):
lower=args[0][1]
upper=args[0][2]
for x in range(lower,upper):
a = question[x-1]
try:
pass
except:
continue
#write item to file
print(f,'a = ',a)
reader(a)
writer()
main()
注意:代码似乎不起作用。迟早会有一个进程试图打开一个文件,而另一个进程正在向该文件写入数据,然后事情就会破裂 相反,我的策略是:
如果您仍在使用python 2.7,
print()
在2.7中是无效的,除非您从\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
导入,否则我使用的是python3.6为什么要用python2.7标记?我删除了Ta。这和你的解释很接近吗?@JesujobaALABI不,甚至不接近。再读一遍我的步骤。注意我在步骤中输入的每一个单词。我不确定我是否完全理解(3)@JesujobaALABI(3)是可选的,只是一种提供优雅关闭子进程的方法。解决方案的要点是(1)和(2)。