apply_async 如何调用 class 而不是 func
資深大佬 : smallgoogle 3
代码:
from multiprocessing import Pool import os, time class tasktest(): def __init__(self, msg): self.msg = msg def run(self): # printxx() print("=== 主进程号%d, 进程号为%d" % (os.getppid(), os.getpid())) # print(self.msg) def throw_error(e): print('=========== Error Start ===========') print("主进程号%d, 进程号为%d" % (os.getppid(), os.getpid())) print('=========== Error End ===========') def worker(msg): t_start = time.time() print("开始执行,主进程号%d,进程号为%d" % (os.getppid(), os.getpid())) tasktest(msg).run() t_stop = time.time() print("执行完毕,耗时%0.2f" % (t_stop - t_start)) def start(d): po = Pool(10) d_list = d for_times = 0 while len(d_list) > 0: x = 0 for i in list(d_list): if x < 2: po.apply_async(worker, (i, ), error_callback=throw_error) d_list.pop(0) x+=1 else: break for_times += 1 po.close() po.join() if __name__ == '__main__': d = [{ "id": 1, }, { "id": 2, }, { "id": 3, }, { "id": 4, }] start(d)
我当前是的 apply_async 是调用 worker 方法 然后 worker 再调用 tasktest
这样的话,我就不能在 error_callback 异常里处理 tasktest 的异常进程了。
那么如何 apply_async 可以直接调用 tasktest 呢? 比如: po.apply_async(tasktest.run(), (i, ), error_callback=throw_error)
这样我就可以处理异常子进程了。
可是这个写法是不正确的,所以这个位置应该如何写呢?
我尝试过谷歌和百度,给出的方法都是 func,并没有说如何 class 这样调用。
自己截帖一下:
po.apply_async(Baidu(i).run, error_callback=throw_error)
原来酱紫即可, 可是问题来了, 这样还是没办法在 throw_error 获取到子进程的 pid
大佬有話說 (4)