Python 多线程无当前事件循环
Python Multithreading no current event loop
仅当未从 validate() 调用 fetch() 时,我的线程才能正常工作。但在下面的这种情况下 returns
RuntimeError: 线程中没有当前事件循环
在所有线程 0 - 99 中,我在这里做错了什么?
from threading import Thread
import requests
from bs4 import BeautifulSoup
from requests_html import HTMLSession
def fetch():
#fetch data from another site
session = HTMLSession()
url='http://url'
data = session.get(url)
data.html.render()
content = data.html.html
soup = BeautifulSoup(content, "html.parser")
iban = soup.find('p',{"id":"demo"})
return result.text
def validate():
url = "https://url"
payload = {
"data" : fetch(),
"veto" : "fi"
}
response = requests.post(url, data=payload)
soup = BeautifulSoup(response.text, "html.parser")
data = soup.body.find(text='contact')
if(data):
print (data)
else:
print ("no data")
if __name__ == "__main__":
threads = []
for i in range(100):
# We start one thread per url present.
process = Thread(target=validate)
process.start()
threads.append(process)
通过快速搜索错误,我发现 this Github issue 似乎显示了您的问题及其解决方案。
看起来您需要使用 asyncio
,并且在每个 运行 线程的开头,调用 asyncio.set_event_loop(asyncio.new_event_loop())
.
仅当未从 validate() 调用 fetch() 时,我的线程才能正常工作。但在下面的这种情况下 returns
RuntimeError: 线程中没有当前事件循环
在所有线程 0 - 99 中,我在这里做错了什么?
from threading import Thread
import requests
from bs4 import BeautifulSoup
from requests_html import HTMLSession
def fetch():
#fetch data from another site
session = HTMLSession()
url='http://url'
data = session.get(url)
data.html.render()
content = data.html.html
soup = BeautifulSoup(content, "html.parser")
iban = soup.find('p',{"id":"demo"})
return result.text
def validate():
url = "https://url"
payload = {
"data" : fetch(),
"veto" : "fi"
}
response = requests.post(url, data=payload)
soup = BeautifulSoup(response.text, "html.parser")
data = soup.body.find(text='contact')
if(data):
print (data)
else:
print ("no data")
if __name__ == "__main__":
threads = []
for i in range(100):
# We start one thread per url present.
process = Thread(target=validate)
process.start()
threads.append(process)
通过快速搜索错误,我发现 this Github issue 似乎显示了您的问题及其解决方案。
看起来您需要使用 asyncio
,并且在每个 运行 线程的开头,调用 asyncio.set_event_loop(asyncio.new_event_loop())
.