如何在实例方法(甚至是类方法)中使用multiprocessing.Pool库中的apply_async?

时间:2019-05-19 12:30:03

标签: python-2.7 multiprocessing

我想在一个类中使用多处理中的apply_async, 我的代码例如是:

class Try_multiprocess():
def multyprocese_chunks(self,chunks):
    pool = Pool(processes=2)
    site_id=564
    site_st= 564
    for chunk_ix, chunk in enumerate(chunks):
        pool.apply_async(self.execute_chunk, args=(chunk, chunk_ix, site_id, site_st,))

    print "{} wait for join".format(datetime.datetime.now())
    pool.close()
    pool.join()
    print "{} after for join".format(datetime.datetime.now())


def execute_chunk(self, chunk, chunk_ix, site_id, site_st):
    print "{} execute_chunk chunk : {} ".format(datetime.datetime.now(), chunk_ix)

,这不起作用(什么都没有打印,也没有错误),我在某处读到无法实例化实例方法的地方,但是有任何解决方法吗?也许与静态/类方法的?还是以其他方式而不是从类中提取所有方法?

1 个答案:

答案 0 :(得分:0)

根据Python multiprocessing PicklingError: Can't pickle <type 'function'>,答案为否: multiprocessing只能将Python对象传输到可以腌制的工作进程。如果您无法按照unutbu所述重新组织代码, https://thelaziestprogrammer.com/python/a-multiprocessing-pool-pickle还建议不要对泡菜对象进行多处理