为list中的每个元素创建线程



我正在尝试为我的列表中的每个项目创建一个单独的线程。

我怎样才能做到这一点?

列表包含10-20个url。我需要下载,解析和插入到DB

所以我要做的是:

urls = {'url1,url2,url3'}
def get_and_insert(xml):
try:
get = requests.get(xml)
parsed = xmltodict.parse(get.text)
//upload info to DB and so on..

for each in urls:
threading.Thread(target=get_and_insert(each)).start()

但是python仍然一个接一个地访问每个url。没有线程。

怎么做?或者也许有人可以分享一个async的例子。

问题在

threading.Thread(target=get_and_insert(each)).start()

我错误地传递参数给线程

正确做法:

threading.Thread(target=get_and_insert,args=(each,)).start()

因为参数应该是元组

现在它工作了

您需要在args中发送参数,不要忘记关闭线程!

threads = []
urls = {'url1,url2,url3'}
for each in urls:
t = threading.Thread(target=get_and_insert, args=(each,))
t.start()
threads.append(t)
for t in threads:
t.join()
print(t.is_alive())

最新更新