Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python RuntimeError:线程';中没有当前事件循环;虚拟-1';_Python_Django_Python Asyncio_Event Loop - Fatal编程技术网

Python RuntimeError:线程';中没有当前事件循环;虚拟-1';

Python RuntimeError:线程';中没有当前事件循环;虚拟-1';,python,django,python-asyncio,event-loop,Python,Django,Python Asyncio,Event Loop,我正在开发一个web应用程序,其后端是Python和Django服务器。我有一些raspberry PI,它们正在向服务器发送数据,然后我应该从后端获取这些数据。我成功地完成了我的项目,所以我对代码很有把握。现在,我想将此功能集成到我的项目中,下面是文件: loop = asyncio.get_event_loop() class StartApp: def __init__(self, interval=1): self.interval = interval

我正在开发一个web应用程序,其后端是Python和Django服务器。我有一些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))
我在运行我的应用程序时出现以下错误:

Unhandled exception in thread started by <function check_errors.<locals>.wrapper at 0x7f55cdc989d8>
Traceback (most recent call last):
  File "/usr/local/lib/python3.5/dist-packages/django/utils/autoreload.py", line 228, in wrapper
    fn(*args, **kwargs)
  File "/usr/local/lib/python3.5/dist-packages/django/core/management/commands/runserver.py", line 147, in inner_run
    handler = self.get_handler(*args, **options)
  File "/usr/local/lib/python3.5/dist-packages/django/contrib/staticfiles/management/commands/runserver.py", line 28, in get_handler
    handler = super(Command, self).get_handler(*args, **options)
  File "/usr/local/lib/python3.5/dist-packages/django/core/management/commands/runserver.py", line 68, in get_handler
    return get_internal_wsgi_application()
  File "/usr/local/lib/python3.5/dist-packages/django/core/servers/basehttp.py", line 47, in get_internal_wsgi_application
    return import_string(app_path)
  File "/usr/local/lib/python3.5/dist-packages/django/utils/module_loading.py", line 20, in import_string
    module = import_module(module_path)
  File "/usr/lib/python3.5/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 986, in _gcd_import
  File "<frozen importlib._bootstrap>", line 969, in _find_and_load
  File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 673, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 665, in exec_module
  File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed
  File "/home/vincentnahmias/Workspace/IOT-Testbed-Dashboard/IOT-Testbed-Dashboard/wsgi.py", line 13, in <module>
    from Dashboard.pySharkToDb.LAN_to_DB import StartApp
  File "/home/vincentnahmias/Workspace/IOT-Testbed-Dashboard/Dashboard/pySharkToDb/LAN_to_DB.py", line 17, in <module>
    loop = asyncio.get_event_loop()
  File "/usr/lib/python3.5/asyncio/events.py", line 632, in get_event_loop
    return get_event_loop_policy().get_event_loop()
  File "/usr/lib/python3.5/asyncio/events.py", line 578, in get_event_loop
    % threading.current_thread().name)
RuntimeError: There is no current event loop in thread 'Dummy-1'.

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

感谢@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))

我假设Django在主线程之外运行代码。尝试使用
loop=asyncio.new_event_loop();asyncio.set\u event\u loop(loop)
在顶层
运行之前,直到\u complete()
,然后
loop.close()
。另外,将
time.sleep(1)
替换为
wait asyncio.sleep(1)
。非常感谢,它的效果非常好<代码>异步IO.sleep(1)除非等待,否则不会执行任何操作。换句话说,您需要
等待asyncio.sleep(1)
才能真正睡眠。
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))