作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个使用线程的 python bottle 应用程序。因为我正在使用 monkey.patch ,线程正在阻止应用程序执行(从线程触发的对话框阻止瓶路由响应客户端,直到被关闭。)
这里的一项小研究表明我应该使用 monkey patch 而不是尝试修补 Thread:
# Patch python's threads with greenlets
from gevent import monkey
monkey.patch_all(thread=False)
这不会阻塞最小 example我写了。
但是在大量使用 Threads 时会引发这些错误,方法如 threading.setEvent()
这是我得到的错误:
C:\Users\IEUser\downloadloft-localserver>python mainserver.py
Exception in thread Thread-1:
Traceback (most recent call last):
File "C:\Program Files\DownloadLoft\Python27\lib\threading.py", line 551, in _
_bootstrap_inner
self.run()
File "C:\Program Files\DownloadLoft\Python27\lib\threading.py", line 753, in r
un
self.finished.wait(self.interval)
File "C:\Program Files\DownloadLoft\Python27\lib\threading.py", line 403, in w
ait
self.__cond.wait(timeout)
File "C:\Program Files\DownloadLoft\Python27\lib\threading.py", line 262, in w
ait
_sleep(delay)
File "c:\users\admini~1\appdata\local\temp\easy_install-sch3hm\gevent-0.13.8-p
y2.7-win32.egg.tmp\gevent\hub.py", line 79, in sleep
switch_result = get_hub().switch()
File "c:\users\admini~1\appdata\local\temp\easy_install-sch3hm\gevent-0.13.8-p
y2.7-win32.egg.tmp\gevent\hub.py", line 135, in get_hub
raise NotImplementedError('gevent is only usable from a single thread')
NotImplementedError: gevent is only usable from a single thread
Bottle v0.12-dev server starting up (using GeventSocketIOServer())...
Listening on http://localhost:8080/
Hit Ctrl-C to quit.
Exception in thread Thread-2:
Traceback (most recent call last):
File "C:\Program Files\DownloadLoft\Python27\lib\threading.py", line 551, in _
_bootstrap_inner
self.run()
File "C:\Program Files\DownloadLoft\Python27\lib\threading.py", line 753, in r
un
self.finished.wait(self.interval)
File "C:\Program Files\DownloadLoft\Python27\lib\threading.py", line 403, in w
ait
self.__cond.wait(timeout)
File "C:\Program Files\DownloadLoft\Python27\lib\threading.py", line 262, in w
ait
_sleep(delay)
File "c:\users\admini~1\appdata\local\temp\easy_install-sch3hm\gevent-0.13.8-p
y2.7-win32.egg.tmp\gevent\hub.py", line 79, in sleep
switch_result = get_hub().switch()
File "c:\users\admini~1\appdata\local\temp\easy_install-sch3hm\gevent-0.13.8-p
y2.7-win32.egg.tmp\gevent\hub.py", line 135, in get_hub
raise NotImplementedError('gevent is only usable from a single thread')
NotImplementedError: gevent is only usable from a single thread
这是 gevent.monkeypatch 的已知问题吗?有什么想法吗?
最佳答案
Bottle 应用程序是线程化的,因此您不能在 Bottle 路由中调用的任何函数中使用 gevent。
为了帮助你,我需要推测你为什么使用线程。
如果要加速你的 bottle 网站,只需使用 cherrypy 服务器:
pip install cherrypy
(或者只是将 cherrypy 目录转储到您当前的目录中,它是一个纯 Python 服务器)
然后以这种方式运行你的 bottle 应用程序:
bottle.run(server='cherrypy')
如果是因为你想在不阻塞响应的情况下进行非阻塞调用(例如获取 URL),手动完成它很容易:
关于python - Bottle gevent 和线程 : gevent is only usable from a single thread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16517796/
我是一名优秀的程序员,十分优秀!