gevent如何保证多个协程之间不共享同一个线程局部变量

Posted

技术标签:

【中文标题】gevent如何保证多个协程之间不共享同一个线程局部变量【英文标题】:How does gevent ensure that the same thread-local variables are not shared between multiple coroutines 【发布时间】:2021-11-07 21:30:05 【问题描述】:

我有一个Python 2 django项目,是从gunicorn开始的,代码里写了很多threading.currentThread().xxxxxx ='some value'

因为协程复用同一个线程,很好奇gevent如何保证协程A(线程1)中创建的currentThread变量不会影响协程B(同线程1强>)。

毕竟代码上的写法是:

import threading
threading.currentThread().xxxxx ='ABCD'

代替

import gevent
gevent.currentCoroutine().xxxxx ='ABCD' (simulate my guess)

感谢您的帮助

【问题讨论】:

【参考方案1】:

据我所知并没有。普通的 Gevent 协程在同一个线程中运行 - 如果您在一个协程中修改该线程上的某些内容,那么它也会在另一个协程中被修改。

如果这是关于 gunicorn 的问题,那就另当别论了,下面的答案对此有一些详细的说明 - https://***.com/a/41696500/7970018。

【讨论】:

以上是关于gevent如何保证多个协程之间不共享同一个线程局部变量的主要内容,如果未能解决你的问题,请参考以下文章