首先,抱歉我的英语不好.在我的项目中,我有很多I/O网络请求.主数据存储在另一个项目中,并且访问由Web API(JSON/XML)提供,轮询.我们为每个新用户会话使用此API(获取有关用户的信息).有时,我们在等待回复时遇到问题.我们使用nginx + uwsgi + django.如您所知,Django是同步(或阻塞).我们使用uwsgi和多线程来解决网络IO等待的问题.我决定读一下gevent.我理解合作和先发制人多任务之间的区别.我希望gevent可以更好地解决这个问题的uwsgi线程(网络I/O瓶颈).但结果几乎相同.有时gevent较弱.也许某个地方我错了.请告诉我.
这是uwsgi配置示例.GEVENT:
$ uwsgi --http :8001 --module ugtest.wsgi --gevent 40 --gevent-monkey-patch
Run Code Online (Sandbox Code Playgroud)
线程:
$ uwsgi --http :8001 --module ugtest.wsgi --enable-threads --threads 40
Run Code Online (Sandbox Code Playgroud)
控制器示例:
def simple_test_action(request):
# get data from API without parsing (only for simple I/O test)
data = _get_data_by_url(API_URL)
return JsonResponse(data, safe=False)
import httplib
from urlparse import urlparse
def _get_data_by_url(url):
u = urlparse(url)
if str(u.scheme).strip().lower() == 'https':
conn = httplib.HTTPSConnection(u.netloc)
else:
conn = httplib.HTTPConnection(u.netloc)
path_with_params = '%s?%s' % (u.path, u.query, )
conn.request("GET", path_with_params)
resp = …
Run Code Online (Sandbox Code Playgroud) 我有一个清单:
[
{
'avail': 'blabla',
'rep_main': 'qweqwe',
....
},
{
'avail': 'asdasd',
'rep_main': 'zxczxc',
....
},
...
]
Run Code Online (Sandbox Code Playgroud)
我希望通过regexp获取项目的索引这就像没有regexp的版本:
[list['rep_main'] for elem in list].index('qweqwe')
Run Code Online (Sandbox Code Playgroud)