多重处理-在start和join之间进行工作

问题描述

正在进行几轮数据处理,我将每一轮分配到多个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 (将#修改为@)