问题描述
我正在进行几轮数据处理,我将每一轮分配到多个workers
上。每个回合都需要一个预处理步骤make_index()
,在这里我创建一个只读的全局倒排索引I
。
global I;
workers = [MP.Process(target=work,args=(Q,R,)) for x in range(num_workers)];
for batch in batches:
put(batch,Q);
for worker in workers:
worker.start();
I_next = make_index(next_round);
for worker in workers:
worker.join();
I = I_next;
#repeat...
这个想法是,我开始工作,然后在他们工作时,花时间准备下一个倒排索引。我无法在Process()
中执行此操作,因为我正在编写全局对象。
我的问题是worker.start()
似乎花费了很长时间,因此make_index()
的调用很晚,而我最终要等到工作人员完成后再等待它完成。
这是我的put()
函数,尽管我很早就把所有“ ...完成放置...”了。但是,我从另一个工人那里获得了一个又一个偏移的开始打印。
def put(value,queue,sleeptime=0.1,max_trytime=1):
start_time = time.time();
try_time = 0;
while True:
try:
queue.put(value,block=False);
print('...done put...');
break;
except Exception as e:
try_time = time.time() - start_time;
if try_time > max_trytime:
print('Failed to put.');
return 1;
time.sleep(sleeptime);
关于什么是解决方案的任何想法?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)