Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.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
AWS物联网Python SDK和异步IO_Python_Amazon Web Services_Mqtt_Python Asyncio_Aws Iot - Fatal编程技术网

AWS物联网Python SDK和异步IO

AWS物联网Python SDK和异步IO,python,amazon-web-services,mqtt,python-asyncio,aws-iot,Python,Amazon Web Services,Mqtt,Python Asyncio,Aws Iot,我需要使用AWS物联网MQTT服务。我现在正在做一些实验 我的应用程序将使用WebSocket与另一个服务通信,然后发布/订阅MQTT主题以转发/接收消息 该库是否可能会阻止代码执行?我仍然试着了解asyncio,不确定应该注意什么。我如何知道它是否会引起问题 我相信我只需要使用上面的图书馆 这是我的工作代码的摘录: class AWSIoTClient: def __init__(): ... self.client = AWSIoTMQTTClien

我需要使用AWS物联网MQTT服务。我现在正在做一些实验

我的应用程序将使用WebSocket与另一个服务通信,然后发布/订阅MQTT主题以转发/接收消息

该库是否可能会阻止代码执行?我仍然试着了解asyncio,不确定应该注意什么。我如何知道它是否会引起问题

我相信我只需要使用上面的图书馆

这是我的工作代码的摘录:

class AWSIoTClient:

    def __init__():
        ...
        self.client = AWSIoTMQTTClient(...)

    def subscribe(self, callback):
        self.client.subscribe(f'{self.TOPIC}/subscribe/', 0, callback)

    def publish(self, message):
        self.client.publish(self.TOPIC, message, 0)


class MyWSProtocol(WebSocketClientProtocol):

    def set_aws_client(self, client: AWSIoTClient):
        client.subscribe(self.customCallback)
        self.client = client

    def customCallback(self, client, userdata, message):
        # This will be called when we send message from AWS
        if message.payload:
            message = json.loads(message.payload.decode('utf-8').replace("'", '"'))
            message['id'] = self.next_id()
            self.sendMessage(json.dumps(message).encode('utf-8'))

    def onMessage(self, payload, isBinary):
        message = json.loads(payload)

        # This will forward message to AWS
        self.client.publish(str(payload))
该库是否可能会阻止代码执行

我如何知道它是否会引起问题

您不应该允许在任何协程中包含长时间运行的阻塞(同步)代码。这将导致阻塞您的全局事件循环,并进一步阻塞您在任何地方的所有协程

async def main():
    await asyncio.sleep(3)  # async sleeping, it's ok

    time.sleep(3)           # synchronous sleeping, this freezes event loop 
                            # and all coroutines for 3 seconds, 
                            # you should avoid it!
    
    await asyncio.sleep(3)  # async sleeping, it's ok
如果您需要在协同程序中运行阻塞代码,您应该在executor中执行它(关于它)

编写协同程序时应牢记这一点,但如果启用以下功能,asyncio通常会警告您此错误:

您将看到警告:

Executing <Handle <TaskWakeupMethWrapper object at 0x000002063C2521F8>(<Future finis...events.py:275>) created at C:\Users\gmn\AppData\Local\Programs\Python\Python36\Lib\asyncio\futures.py:348> took 3.000 seconds
执行耗时3000秒

将添加调试语句,查看是否出现问题。谢谢,调试没有错误。我将继续寻找,我想我需要了解SDK是如何从源代码开始工作的。
Executing <Handle <TaskWakeupMethWrapper object at 0x000002063C2521F8>(<Future finis...events.py:275>) created at C:\Users\gmn\AppData\Local\Programs\Python\Python36\Lib\asyncio\futures.py:348> took 3.000 seconds