原因:apply_async(并发)回调函数的用法
# coding=utf-8
import logging
import multiprocessing
import os
import time
from multiprocessing import Pool
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s 【 %(process)d 】 %(processName)s %(message)s"
)
def func (i):
logging.info(f' 第{i}个任务')
return i # func的返回值会作为callback的参数
def call_back (res): # 回调函数
logging.info(f'\t\t\tfunc函数的返回值--->{res}')
def main (ctx):
with ctx.Pool(2) as pool:
[pool.apply_async(func, args=(i,), callback=call_back)
for i in range(1, 15)]
pool.close()
pool.join()
if __name__ == '__main__':
# windows 启动方式
multiprocessing.set_start_method('spawn')
# 获取上下文
ctx = multiprocessing.get_context('spawn')
# 检查这是否是冻结的可执行文件中的伪分支进程。
ctx.freeze_support()
main(ctx)
输出:
2019-10-06 00:18:05,663 【 3336 】 SpawnPoolWorker-1 第1个任务
2019-10-06 00:18:05,663 【 2884 】 SpawnPoolWorker-2 第2个任务
2019-10-06 00:18:05,663 【 3336 】 SpawnPoolWorker-1 第3个任务
2019-10-06 00:18:05,663 【 2884 】 SpawnPoolWorker-2 第4个任务
2019-10-06 00:18:05,663 【 4668 】 MainProcess func函数的返回值--->1
2019-10-06 00:18:05,663 【 3336 】 SpawnPoolWorker-1 第5个任务
2019-10-06 00:18:05,663 【 2884 】 SpawnPoolWorker-2 第6个任务
2019-10-06 00:18:05,663 【 4668 】 MainProcess func函数的返回值--->2
2019-10-06 00:18:05,663 【 3336 】 SpawnPoolWorker-1 第7个任务
2019-10-06 00:18:05,663 【 2884 】 SpawnPoolWorker-2 第8个任务
2019-10-06 00:18:05,663 【 4668 】 MainProcess func函数的返回值--->3
2019-10-06 00:18:05,663 【 3336 】 SpawnPoolWorker-1 第9个任务
2019-10-06 00:18:05,663 【 2884 】 SpawnPoolWorker-2 第10个任务
2019-10-06 00:18:05,663 【 4668 】 MainProcess func函数的返回值--->4
2019-10-06 00:18:05,664 【 3336 】 SpawnPoolWorker-1 第11个任务
2019-10-06 00:18:05,664 【 2884 】 SpawnPoolWorker-2 第12个任务
2019-10-06 00:18:05,664 【 4668 】 MainProcess func函数的返回值--->5
2019-10-06 00:18:05,664 【 3336 】 SpawnPoolWorker-1 第13个任务
2019-10-06 00:18:05,664 【 2884 】 SpawnPoolWorker-2 第14个任务
2019-10-06 00:18:05,664 【 4668 】 MainProcess func函数的返回值--->6
2019-10-06 00:18:05,664 【 4668 】 MainProcess func函数的返回值--->7
2019-10-06 00:18:05,664 【 4668 】 MainProcess func函数的返回值--->8
2019-10-06 00:18:05,664 【 4668 】 MainProcess func函数的返回值--->9
2019-10-06 00:18:05,664 【 4668 】 MainProcess func函数的返回值--->10
2019-10-06 00:18:05,664 【 4668 】 MainProcess func函数的返回值--->11
2019-10-06 00:18:05,664 【 4668 】 MainProcess func函数的返回值--->12
2019-10-06 00:18:05,664 【 4668 】 MainProcess func函数的返回值--->13
2019-10-06 00:18:05,665 【 4668 】 MainProcess func函数的返回值--->14