学习django框架时用thrift做一个进程之间的通信,client在django_channels里,然后我在server端引入channel_layer来调用它的group_add函数,因为group_add是异步函数所以我用async_to_sync把它变成同步函数,结果运行时报了RuntimeErro: Event loop is close的异常
报错如下:
#就是这一行代码报错
async_to_sync(channel_layer.group_add)(room_name, p.channel_name)
由于我并不了解python的异步/同步编程,对这个问题毫无头绪,报错信息中没有我写的文件,我就想可能是没有正确使用async_to_sync函数,于是网上陆陆续续地看了看asgiref.sync模块,事件循环,协程等等内容,但都没有找到解决方法,只在stackoverflow上看到一个类似的问题:https://stackoverflow.com/questions/74048946/django-channels-event-loop-is-closing-when-using-thread,其中提供的方法是修改settings中的CHANNEL_LAYERS的BACKEND,虽然答主说他这个报错是由channels_redis引起的,似乎跟我不太一样,不过我也尝试修改settings,结果报了另外一个错误:
#这是asgi中相关的代码
import django
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myapp.settings')
django.setup()
from channels.layers import get_channel_layer
channel_layer = get_channel_layer()
#在当前文件中导入channel_layer
from myapp.asgi import channel_layer
所以我不是很理解为什么会有这个错误,找了几小时都还是没有什么头绪。这个项目是我找的课程跟着做的,其中很多细节我并不清楚,但我依然希望能解决这个问题(至少能让项目跑起来),求神牛们给个解决思路 ╥﹏╥
你把报错复制出来,嗯还有源文件都发给我看一下