neu*_*nus 4 python linux kill multiprocessing python-requests
请检查此python代码:
#!/usr/bin/env python
import requests
import multiprocessing
from time import sleep, time
from requests import async
def do_req():
r = requests.get("http://w3c.org/")
def do_sth():
while True:
sleep(10)
if __name__ == '__main__':
do_req()
multiprocessing.Process( target=do_sth, args=() ).start()
Run Code Online (Sandbox Code Playgroud)
当我按Ctrl-C(运行后等待2秒 - 让Process运行)时,它不会停止.当我将导入订单更改为:
from requests import async
from time import sleep, time
Run Code Online (Sandbox Code Playgroud)
它在Ctrl-C之后停止.为什么它不会在第一个例子中停止/杀死?
这是一个错误还是一个功能?
笔记:
multiprocessing.__version__ == 0.70a1,requests.__version__ == 0.11.2,gevent.__version__ == 0.13.7请求异步模块使用gevent.如果你看一下gevent的源代码,你会看到它修补了许多Python的标准库函数,包括sleep:
导入期间执行request.async模块:
from gevent import monkey as curious_george
# Monkey-patch.
curious_george.patch_all(thread=False, select=False)
Run Code Online (Sandbox Code Playgroud)
查看gevent的monkey.py模块,您可以看到:
https://bitbucket.org/denis/gevent/src/f838056c793d/gevent/monkey.py#cl-128
def patch_time():
"""Replace :func:`time.sleep` with :func:`gevent.sleep`."""
from gevent.hub import sleep
import time
patch_item(time, 'sleep', sleep)
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请查看gevent存储库中的代码.
| 归档时间: |
|
| 查看次数: |
1142 次 |
| 最近记录: |