小编Jep*_*Jep的帖子

Python - 使用队列时不会关闭多处理线程

这适用于 Python 3.x

我正在从 CSV 文件中以 300 个块为单位加载记录,然后生成工作线程以将它们提交给 REST API。我将 HTTP 响应保存在队列中,以便在处理整个 CSV 文件后获得跳过记录数的计数。但是,在我向我的工作人员添加一个队列之后,线程似乎不再关闭。我想监视线程数有两个原因:(1) 一旦全部完成,我可以计算并显示跳过计数;(2) 我想增强我的脚本以生成不超过 20 个左右的线程,所以我不要耗尽内存。

我有两个问题:

  • 有人可以解释为什么线程在使用时保持活动状态q.put()吗?
  • 是否有不同的方法来管理线程数并监视所有线程是否已完成?

这是我的代码(有些简化,因为我无法分享我正在调用的 API 的确切细节):

import requests, json, csv, time, datetime, multiprocessing

TEST_FILE = 'file.csv'

def read_test_data(path, chunksize=300):
    leads = []
    with open(path, 'rU') as data:
        reader = csv.DictReader(data)
        for index, row in enumerate(reader):
            if (index % chunksize == 0 and index > 0):
                yield leads
                del leads[:]
            leads.append(row)
        yield leads

def worker(leads, q):
    payload = {"action":"createOrUpdate","input":leads}
    r = …
Run Code Online (Sandbox Code Playgroud)

python queue multithreading python-3.x python-multiprocessing

2
推荐指数
1
解决办法
4029
查看次数