我正在尝试为我的列表中的每个项目创建一个单独的线程。
我怎样才能做到这一点?
列表包含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())