烧瓶,uWSGI和线程产生不可重现的结果

我有一个基于flask + uwsgi(运行在docker容器中)的API。 它的input是一个文本,它的输出是一个简单的json,带有关于这个文本的数据(类似{“score”:1})。

我在5个线程中请求这个API。 在我的uwsgi.ini中我有进程= 8和线程= 2.最近我注意到一些结果是不可重复的,虽然API的源代码没有改变,没有任何代码挑起内部的随机答案。 所以我采取了相同的一组查询,并将其提交给我的API,首先是顺序,然后是反向的。 大约1%的答复不同!

当我在本地做同样的事情(没有线程和docker&只在一个线程),结果变得一样。 所以我的假设是烧瓶有时会混淆对不同线索的反应。

有人处理过吗? 我发现只有https://github.com/getsentry/raven-python/issues/923 ,但如果是这样的话,那么问题仍然没有解决,因为我明白…

所以这里是相关的代码片断:

uwsgi.ini

[uwsgi] socket = :8000 processes = 8 threads = 2 master = true module = web:app 

要求

 import json from multiprocessing import Pool import requests def fetch_score(query): r = requests.post("http://url/api/score", data = query) score = json.loads(r.text) query["score"] = score["score"] return query def calculateParallel(arr_of_data): pool = Pool(processes=5) results = pool.map(fetch_score, arr_of_data) pool.close() pool.join() return results results = calculateParallel(final_data)