Im कुछ सिंक्रोनस कोड को Aiohttp का उपयोग करके asyncio में स्थानांतरित करने की प्रक्रिया में। सिंक्रोनस कोड को चलाने में 15 मिनट लग रहे थे, इसलिए मैं इसे सुधारने की उम्मीद कर रहा हूं।पायथन Aiohttp/asyncio - लौटाए गए डेटा को कैसे संसाधित करें
मेरे पास कुछ कामकाजी कोड है जो कुछ यूआरएल से डेटा प्राप्त करता है और प्रत्येक के शरीर को लौटाता है। लेकिन यह सिर्फ 1 प्रयोगशाला साइट के खिलाफ है, मेरे पास 70+ वास्तविक साइटें हैं।
तो अगर मैं सभी साइटों है कि एक सूची में 700 यूआरएल होगा संसाधित करने के लिए के लिए सभी यूआरएल की एक सूची बनाने के लिए एक पाश मिला है। अब उन्हें संसाधित करना मुझे नहीं लगता कि एक समस्या है?
लेकिन परिणामों के साथ 'सामान' कर रहे हैं, मुझे यकीन नहीं है कि प्रोग्राम कैसे करें? मेरे पास पहले से ही कोड है जो लौटाए गए प्रत्येक परिणामों में 'सामान' करेगा, लेकिन मुझे यकीन नहीं है कि सही प्रकार के परिणाम के खिलाफ प्रोग्राम कैसे करें।
जब कोड चलता है तो यह सभी यूआरएल को संसाधित करता है और चलाने के समय के आधार पर, एक अज्ञात आदेश देता है?
क्या मुझे ऐसे फ़ंक्शन की आवश्यकता है जो किसी भी प्रकार के परिणाम को संसाधित करेगी?
import asyncio, aiohttp, ssl
from bs4 import BeautifulSoup
def page_content(page):
return BeautifulSoup(page, 'html.parser')
async def fetch(session, url):
with aiohttp.Timeout(15, loop=session.loop):
async with session.get(url) as response:
return page_content(await response.text())
async def get_url_data(urls, username, password):
tasks = []
# Fetch all responses within one Client session,
# keep connection alive for all requests.
async with aiohttp.ClientSession(auth=aiohttp.BasicAuth(username, password)) as session:
for i in urls:
task = asyncio.ensure_future(fetch(session, i))
tasks.append(task)
responses = await asyncio.gather(*tasks)
# you now have all response bodies in this variable
for i in responses:
print(i.title.text)
return responses
def main():
username = 'monitoring'
password = '*********'
ip = '10.10.10.2'
urls = [
'http://{0}:8444/level/15/exec/-/ping/{1}/timeout/1/source/vlan/5/CR'.format(ip,'10.10.0.1'),
'http://{0}:8444/level/15/exec/-/traceroute/{1}/source/vlan/5/probe/2/timeout/1/ttl/0/10/CR'.format(ip,'10.10.0.1'),
'http://{0}:8444/level/15/exec/-/traceroute/{1}/source/vlan/5/probe/2/timeout/1/ttl/0/10/CR'.format(ip,'frontend.domain.com'),
'http://{0}:8444/level/15/exec/-/traceroute/{1}/source/vlan/5/probe/2/timeout/1/ttl/0/10/CR'.format(ip,'planner.domain.com'),
'http://{0}:8444/level/15/exec/-/traceroute/{1}/source/vlan/5/probe/2/timeout/1/ttl/0/10/CR'.format(ip,'10.10.10.1'),
'http://{0}:8444/level/15/exec/-/traceroute/{1}/source/vlan/5/probe/2/timeout/1/ttl/0/10/CR'.format(ip,'10.11.11.1'),
'http://{0}:8444/level/15/exec/-/ping/{1}/timeout/1/source/vlan/5/CR'.format(ip,'10.12.12.60'),
'http://{0}:8444/level/15/exec/-/traceroute/{1}/source/vlan/5/probe/2/timeout/1/ttl/0/10/CR'.format(ip,'10.12.12.60'),
'http://{0}:8444/level/15/exec/-/ping/{1}/timeout/1/source/vlan/5/CR'.format(ip,'lon-dc-01.domain.com'),
'http://{0}:8444/level/15/exec/-/traceroute/{1}/source/vlan/5/probe/2/timeout/1/ttl/0/10/CR'.format(ip,'lon-dc-01.domain.com'),
]
loop = asyncio.get_event_loop()
future = asyncio.ensure_future(get_url_data(urls,username,password))
data = loop.run_until_complete(future)
print(data)
if __name__ == "__main__":
main()
धन्यवाद, मैं जो कुछ कहा है, उसे समझता हूं लेकिन आपने मुझे ProcessPoolExecutor भाग में खो दिया है। मुझे परिणामों की एक अलग सीपीयू प्रक्रिया की आवश्यकता है? मैं यह कैसे करु? और मैं उन्हें क्रम में कैसे संसाधित करूं, या क्या मुझे ऐसे फ़ंक्शन की आवश्यकता है जो सभी परिणामों को संसाधित करे चाहे कोई फर्क नहीं पड़ता? – AlexW