Python子进程无法实现并发运行的问题排查
错误原因分析
误用
run()方法而非start():如果你的测试代码里调用的是process.run(),这会直接在主进程中同步执行子进程的任务函数,完全没有创建新的子进程,自然要等任务跑完才会执行后续标记为XX的代码。正确启动子进程的方式是调用process.start(),它会创建独立的新进程并异步执行任务。过早调用
join()方法:如果在启动子进程后立刻调用了process.join(),这个方法会阻塞主进程,直到子进程完全执行完毕才会继续往下执行代码。如果XX代码写在join()之后,就会被延迟到子进程结束才运行。正确的做法是把XX代码放在start()之后、join()之前(如果需要等待子进程结束,join()应该放在XX代码之后)。
修正后的示例代码
import multiprocessing import time def child_task(): print("子进程开始执行") time.sleep(3) print("子进程执行完毕") if __name__ == "__main__": p = multiprocessing.Process(target=child_task) p.start() # 正确启动异步子进程 print("XX:主进程要立即执行的代码") # 这行代码会在子进程启动后立刻运行 p.join() # 按需保留:等待子进程结束,不影响XX代码的执行时机
预期运行日志
XX:主进程要立即执行的代码 子进程开始执行 子进程执行完毕
内容的提问来源于stack exchange,提问作者H3007
相关产品推荐
相关产品推荐

