python - 在使用并发期货时发出日志进程的功能
问题描述
我有一个使用并发期货调用的函数,以加快对极长项目列表的处理。在这个函数中,还有一个函数应该记录正在发生的事情并将其写入文本文件。然而,大概是由于 log 函数基本上同时从 task 函数内部被调用了很多,它没有捕获它应该捕获的所有内容。在下面的示例中,列表中有 120 个项目,每次我运行脚本时,我都会在文本文件中获得不同的行数,从低至 109 到高至 119。
from concurrent import futures
def task(numbers):
total = numbers[0] + numbers[1]
_log(numbers)
return total
def _log(numbers):
with open('log.txt', 'a+') as f:
f.write('Adding '+str(numbers[0])+' and '+str(numbers[1])+'\n')
data = [ [1,1], [2,2], [3,3], [4,4], [1,1], [2,2], [3,3], [4,4], [1,1], [2,2], [3,3], [4,4],
[1,1], [2,2], [3,3], [4,4], [1,1], [2,2], [3,3], [4,4], [1,1], [2,2], [3,3], [4,4],
[1,1], [2,2], [3,3], [4,4], [1,1], [2,2], [3,3], [4,4], [1,1], [2,2], [3,3], [4,4],
[1,1], [2,2], [3,3], [4,4], [1,1], [2,2], [3,3], [4,4], [1,1], [2,2], [3,3], [4,4],
[1,1], [2,2], [3,3], [4,4], [1,1], [2,2], [3,3], [4,4], [1,1], [2,2], [3,3], [4,4],
[1,1], [2,2], [3,3], [4,4], [1,1], [2,2], [3,3], [4,4], [1,1], [2,2], [3,3], [4,4],
[1,1], [2,2], [3,3], [4,4], [1,1], [2,2], [3,3], [4,4], [1,1], [2,2], [3,3], [4,4],
[1,1], [2,2], [3,3], [4,4], [1,1], [2,2], [3,3], [4,4], [1,1], [2,2], [3,3], [4,4],
[1,1], [2,2], [3,3], [4,4], [1,1], [2,2], [3,3], [4,4], [1,1], [2,2], [3,3], [4,4],
[1,1], [2,2], [3,3], [4,4], [1,1], [2,2], [3,3], [4,4], [1,1], [2,2], [3,3], [4,4]
]
ex = futures.ThreadPoolExecutor(max_workers = 60)
results = ex.map(task, data)
有没有办法解决这个问题,或者这只是使用并发期货的结果?
解决方案
推荐阅读
- amazon-s3 - pyspark 在输出中写入大量较小的文件
- ajax - 传单标记重复,removeLayer 问题
- ruby-on-rails - Webpack 编译:部署生产时找不到模块“@babel/preset-env”
- javascript - unirest.post 不是函数
- c - 在 C 中移动当前堆栈帧
- microsoft-cognitive - 无法让语音 SDK 快速返回 LUIS 意图
- matrix - 是否可以在没有矩阵的情况下在 OpenGL ES 中使用纹理?
- c# - 下划线“_”自动更改为问号“?”
- vue.js - 为什么在 vuetify 中使用 v-carousel 时我的页面会刷新?
- wordpress - Woocommerce 税收设置价格未正确显示