Thread.getName() 不代表实际的工人姓名

我编写了一个 python 脚本,将市场数据导入到 MariaDB 数据库中。为了加快导入速度,我决定使用模块线程。因此,首先一个函数使用 URL 填充队列,从中下载数据并将其导入到我的数据库中。不幸的是,导入函数似乎只由一个线程而不是多个线程处理。

一开始的输出状态:


Thread-1

Thread-2

Thread-3

Thread-4

这表明创建了 4 个单独的工作人员,但进入 while 循环使看起来只有一个工作人员实际处理获取的 url。


Thread-1 processes https://someurl=2 queue# 32

Thread-1 processes https://someurl=3 queue# 31

Thread-1 processes https://someurl=4 queue# 30

Thread-1 processes https://someurl=5 queue# 29

Thread-1 processes https://someurl=6 queue# 28

Thread-1 processes https://someurl=7 queue# 27

Thread-1 processes https://someurl=8 queue# 26

Thread-1 processes https://someurl=9 queue# 25

Thread-1 processes https://someurl=10 queue# 24

Thread-1 processes https://someurl=11 queue# 23

Thread-1 processes https://someurl=12 queue# 22

Thread-1 processes https://someurl=13 queue# 21

Thread-1 processes https://someurl=14 queue# 20

Thread-1 processes https://someurl=15 queue# 19

Thread-1 processes https://someurl=16 queue# 18

Thread-1 processes https://someurl=17 queue# 17

Thread-1 processes https://someurl=18 queue# 16

我希望输出看起来像(理想情况下):


Thread-1 processes https://someurl=2 queue# 32

Thread-2 processes https://someurl=3 queue# 31

Thread-3 processes https://someurl=4 queue# 30

Thread-4 processes https://someurl=5 queue# 29

我在这里错过了什么?


九州编程
浏览 147回答 1
1回答

RISEBY

为每个工人打印不同的“名字”:def import_mo(i, urls):    station_id = 60003760    print('Worker', i)    # etc    # later:        print("Worker %s processes %s queue# %s" % (i, url, urls.qsize()))并创建线程:for i in range(num_threads):    worker = Thread(target=import_mo, args=(i,urls,))    worker.setDaemon(True)    threads.append(worker)    worker.start()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python