跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 多进程里嵌套协程,并发数增加的时候,程序卡死是怎么回事?
未分類
23 1 月 2021

多进程里嵌套协程,并发数增加的时候,程序卡死是怎么回事?

多进程里嵌套协程,并发数增加的时候,程序卡死是怎么回事?

資深大佬 : dongcheng 2

import multiprocessing
from multiprocessing import Semaphore
import time
import asyncio
import aiohttp
import requests
import random,time, datetime
import utils
import json

def start_loop(turn):

request_url = ‘https://www.baidu.com’

loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)

tasks = []
for num in range(2000):

func = aio_request(request_url,turn,loop)
task = asyncio.ensure_future(func)
tasks.append(task)

try:
ret = loop.run_until_complete(asyncio.gather(*tasks))
loop.close()
except Exception as e:
print(‘loop 中断或者完成’,e)

return turn

async def aio_request(url,headers,turn,loop):

async with aiohttp.ClientSession() as s:
async with await s.get(url) as response:
print(‘请求内容’, url)
# response.read()二进制(.content )
result = await response.json()
print(url, ‘获取内容完成’)

def main():

start = time.time()

pool = multiprocessing.Pool(processes = 30)
for turn in range(10):
pool.apply_async(start_loop, (turn, ))

pool.close()
pool.join()
print(‘总耗时:’,time.time()-start)
if __name__ == “__main__”:
main()

这是个简单例子。主要逻辑是,多进程跑协程任务,协程处理并发 2000 个地址以上。奇怪的地方在于,我这个例子也能跑,但放到项目里就卡死。而且并发 20 能跑,2000 就卡死。把这个协程单独运行(非进程内)也可以跑,不知道是不是阻塞了。之前实在没并发编程经验,不知道算不算很低级的错误。。。

大佬有話說 (9)

  • 資深大佬 : linw1995

    问问题用 gist 展示代码是美德。

  • 資深大佬 : tanranran

    问问题用 gist 展示代码是美德。

  • 資深大佬 : linw1995

    `async with await s.get(url) as response:` 这行写错了吧,光 async with 就好了

  • 主 資深大佬 : dongcheng

    @linw1995 这么写没报错。不过我发现原因貌似在,semaphore = asyncio.Semaphore(10*multiprocessing.cpu_count())

  • 主 資深大佬 : dongcheng

    semaphore 这个值好像不能随便填

  • 資深大佬 : LeeReamond

    问问题用 gist 展示代码是美德。

  • 資深大佬 : qbqbqbqb

    paste.ubuntu.com ,请

  • 資深大佬 : linw1995

    @dongcheng 问题的代码里没见到有这个 semaphore 。再说你这个用法也不对

  • 資深大佬 : deplives

    一个靠缩紧区分代码块的语言你给我一把梭的顶头写,你给谁看呢

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具