RuntimeError:线程“Dummy1”中没有当前事件循环

2024-09-30 22:19:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个后端使用Python和Django服务器的web应用程序。我有一些raspberry Pi正在向服务器发送数据,然后我应该从后端获取这些数据。我在我的项目中成功地做到了这一点,所以我对代码很有把握。现在我想把这个函数集成到我的项目中,所以这里有一个文件:

loop = asyncio.get_event_loop()

class StartApp:
    def __init__(self, interval=1):
            self.interval = interval
            Mqtt = multiprocessing.Process(target = self.runMqtt)
            loop.run_until_complete(runCoap())
    async def runCoap():
            print('COUCOU C cOAP')
            protocol = await Context.create_client_context()

            requestTemp = Message(code=GET, uri='coap://129.6.60.38/other/sensors/temperature')
            requestHumidity = Message(code=GET, uri='coap://129.6.60.38/other/sensors/humidity')
            while True:
                time.sleep(1)
                try:
                    responseTemp = await protocol.request(requestTemp).response
                    responseHumidity = await protocol.request(requestHumidity).response
                except Exception as e:
                    print('Failed to fetch resource:')
                    print(e)
                else:
                    print('Result: %s\n%r'%(responseTemp.code, responseTemp.payload))
                    print('Result: %s\n%r'%(responseHumidity.code, responseHumidity.payload))

我在运行我的应用程序时会出现以下错误:

^{pr2}$

我试图打印循环,但似乎没有创建循环,所以我假设Django和asyncio之间存在冲突,因为我可以使用以下方法在项目中运行相同的函数:

if __name__ == "__main__":
    asyncio.get_event_loop().run_until_complete(main())

其中main是我命名为runCoap的方法的名称。在


Tags: 项目djangoselfloopasyncio应用程序maincode
1条回答
网友
1楼 · 发布于 2024-09-30 22:19:57

因此,感谢@user4815162342,以下是解决方案:

def __init__(self, interval=1):
        self.interval = interval
        logging.basicConfig(level=logging.INFO)
        loop = asyncio.new_event_loop();
        asyncio.set_event_loop(loop)
        loop.run_until_complete(self.runCoap())
        loop.close()
        Mqtt = multiprocessing.Process(target = self.runMqtt)
async def runCoap(self):
        print('COUCOU C cOAP')
        protocol = await Context.create_client_context()

        requestTemp = Message(code=GET, uri='coap://129.6.60.38/other/sensors/temperature')
        requestHumidity = Message(code=GET, uri='coap://129.6.60.38/other/sensors/humidity')
        while True:
            await asyncio.sleep(1)
            try:
                responseTemp = await protocol.request(requestTemp).response
                responseHumidity = await protocol.request(requestHumidity).response
            except Exception as e:
                print('Failed to fetch resource:')
                print(e)
            else:
                print('Result: %s\n%r'%(responseTemp.code, responseTemp.payload))
                print('Result: %s\n%r'%(responseHumidity.code, responseHumidity.payload))

相关问题 更多 >