0
streamSimulation
을 2 개의 스레드로 4 번 나누어 호출하고 싶습니다.다른 스레드에서 코 루틴 루프를 실행하십시오.
어떻게 두 번째 루프를 만들고 두 번째 스레드를 만들고 그 스레드에서 루프를 실행할 수 있습니까?
import asyncio
import functools
from concurrent.futures import ThreadPoolExecutor
async def streamSimulation(p1,p2,p3,p4):
print("Stream init")
while True:
await asyncio.sleep(2)
print("Stream Simulation")
print("Params: " + p1 + p2 + p3 + p4)
doSomething()
def doSomething():
print("Did something")
def main():
loop = asyncio.get_event_loop()
#Supposed to run in first thread
asyncio.ensure_future(streamSimulation("P1","P2","P3","P4"))
asyncio.ensure_future(streamSimulation("A1","A2","A3","A4"))
#Supposed to run in second thread
asyncio.ensure_future(streamSimulation("Q1","Q2","Q3","Q4"))
asyncio.ensure_future(streamSimulation("B1","B2","B3","B4"))
loop.run_forever()
main()
임 여러 개의 웹 소켓을 듣고 뭔가를 DB에 쓰려고합니다. 이것이 입술인가? – Arne
같은 이벤트 루프에서 여러 웹 소켓을들을 수없는 이유는 무엇입니까? [aiohttp] (https://docs.aiohttp.org/en/stable/)는 그것을 할 수 있습니다. asyncio에는 지원되는 TCP 포트 크기에 대한 제한이 없습니다. –
성능상의 이유. 나는 많은 트래픽 웹 소켓을 동시에 듣고 몇 가지 값을 집계하여 DB에 보내야합니다. 방금 GIL로 인해 멀티 스레딩이 성능을 향상시키지 않는다는 것을 깨달았습니다. 지금 멀티 프로세싱을 들여다 보면,'ProcessPoolExecutor'가 갈 길일 것 같습니다. 그러나'run_in_executor'로 동시 루틴을 실행하는 것은 불가능합니다. 현재 websockets 패키지를 사용 중입니다. – Arne