您的代码看起来没有明显的问题,但可能是由于以下原因导致子进程没有执行:
在Windows上,必须将调用主程序的代码放在if name=='main'语句块中,否则将导致无法启动进程。
由于您使用的是进程池,因此进程池可能会在运行时分配不同的进程来执行任务。如果您的系统中没有足够的空闲进程,则可能会导致子进程无法执行。您可以尝试使用ThreadPoolExecutor而不是ProcessPoolExecutor,以查看问题是否在进程池中。
您的代码中的任务非常简单,可能无法看出子进程是否执行。您可以尝试将fun函数更改为输出一些更有意义的东西,例如时间戳和子进程ID等,以查看子进程是否正在运行。
下面是一个更新后的示例代码,用于输出一些更有意义的东西,以便更好地检查子进程是否正在执行:
import time
import os
from concurrent.futures import ProcessPoolExecutor
def fun(i):
print('Task {} started at {} in process {}'.format(i, time.ctime(), os.getpid()))
time.sleep(1)
print('Task {} finished at {} in process {}'.format(i, time.ctime(), os.getpid()))
if __name__=='__main__':
p = ProcessPoolExecutor(4)
for t in range(10):
p.submit(fun, t)
p.shutdown(wait=True)
请注意,我在代码中添加了os.getpid()函数,以便在每个子进程中输出其进程ID。如果运行此代码,您应该会看到输出类似于以下内容:
Task 0 started at Mon Mar 22 10:40:11 2023 in process 1234
Task 1 started at Mon Mar 22 10:40:11 2023 in process 1235
Task 2 started at Mon Mar 22 10:40:11 2023 in process 1236
Task 3 started at Mon Mar 22 10:40:11 2023 in process 1237
Task 0 finished at Mon Mar 22 10:40:12 2023 in process 1234
Task 4 started at Mon Mar 22 10:40:12 2023 in process 1234
Task 1 finished at Mon Mar 22 10:40:12 2023 in process 1235
Task 5 started at Mon Mar 22 10:40:12 2023 in process 1235
Task 3 finished at Mon Mar 22 10:40:12 2023 in process 1237
Task 6 started at Mon Mar 22 10:40:12 2023 in process 1237
Task 2 finished at Mon Mar 22 10:40:12 2023 in process 1236
Task 7 started at Mon Mar 22 10:40:12 2023 in process 1236
Task 4 finished at Mon Mar 22 10:40:13 2023 in process 1234
Task 8 started at Mon Mar 22 10:40