python-asyncio相关内容
我想做的事: 创建一个自旋的异步事件循环 该循环被传递到我的系统中的各种类,用于在 上调度协程 该循环还用于处理对事件的响应(例如,我有一个队列,一些事件处理代码将在该队列上放置一个项,以及等待该队列上的get()来处理这些值的单独的协同例程) 有一个“拥有”循环的主线程,负责创建循环,在系统关机时将取消循环上正在运行的所有任务,并关闭&;停止循环(干净关机) 我的理解是,
..
我正在尝试使用Asyncio来处理并发网络I/O。要在单个点调度非常多的功能,每个功能完成的时间差别很大。然后,将在每个输出的单独进程中处理接收到的数据。 处理数据的顺序无关紧要,因此考虑到输出可能会有很长的等待期,我希望await无论将来先完成什么,而不是按预定义的顺序。 def fetch(x): sleep() async def main(): futures
..
今天晚上我浏览了pythonasyncio模块文档,为我的一个课程项目寻找一些想法,但我很快发现Python的标准aysncio模块可能缺少功能。 如果您仔细阅读文档,您会发现有一个基于回调的API和一个基于协程的API。回调API可以同时用于构建UDP和TCP应用程序,而协程API看起来只能用于构建TCP应用程序,因为它使用了流样式API。 这给我带来了相当大的问题,因为我正在寻找用
..
我已经使用Asyncio编写了我的脚本,但是发现同时运行的协程太多,并且它经常会挂起。 所以我要同时限制协同例程的数量,一旦达到该限制,我希望等待任何协同例程完成,然后再执行另一个协同例程。 我当前的代码如下所示: loop = asyncio.get_event_loop() p = map(my_func, players) result = loop.run_until_c
..
我在理解如何将新任务挂起到已在运行的事件循环时遇到问题。 此代码: import asyncio import logging @asyncio.coroutine def blocking(cmd): while True: logging.info("in blocking coroutine") yield from asyncio.sl
..
我很难理解协程是如何链接在一起的。在一个比hello world或factorials稍微简单一点的示例中,我希望有一个循环,它持续监视文件修改时间,然后在每次接触文件时打印出时间: #!/usr/bin/env python3 import os import asyncio @asyncio.coroutine def pathmonitor(path): modtime =
..
在我的代码中,我有一个带有属性的类,偶尔需要运行异步代码。有时我需要从异步函数访问属性,有时需要从同步函数访问属性-这就是为什么我不希望我的属性是异步的。此外,我有一种印象,异步属性通常是一种代码气味。如果我错了,请纠正我。 我在从Synchronous属性执行异步方法并在异步方法完成之前阻止进一步执行时遇到了问题。 以下是示例代码: import asyncio async
..
调用函数send_message时出现以下错误。 Exception in thread Thread-1: Traceback (most recent call last): File "/usr/lib/python3.4/threading.py", line 920, in _bootstrap_inner self.run() File "/usr/lib/pyt
..
我希望在异步上下文中使用PyAudio库,但是该库的主入口点只有基于回调的API: import pyaudio def callback(in_data, frame_count, time_info, status): # Do something with data pa = pyaudio.PyAudio() self.stream = self.pa.open(
..
我在围绕Python3的Asyncio库时遇到了麻烦。我有一个邮政编码列表,我正在尝试对API进行异步调用,以获得每个邮政编码对应的城市和州。我可以使用for循环按顺序成功完成此操作,但我希望在邮政编码列表较大的情况下使其更快。 这是我的原件工作正常的示例 import urllib.request, json zips = ['90210', '60647'] def get_c
..
想象一下以下非常常见的情况:您已经编写了一个又长又复杂的函数,并且意识到一些代码应该提取到单独的函数中以便重用和/或可读性。通常,此额外的函数调用不会更改程序的语义。 但是,现在假设您的函数是一个协程,并且您要提取的代码包含至少一个异步调用。现在,将其提取到单独的函数中会突然更改您的程序语义,方法是插入一个新的点,在该点上协同例程产生,事件循环进行控制,并且可以在两者之间调度任何其他协同例程。
..
我使用aiohttp在python3.4中发出一个简单的HTTP请求,如下所示: response = yield from aiohttp.get(url) 应用程序一遍又一遍地请求相同的URL,所以我自然想缓存它。我的第一次尝试是这样的: @functools.lru_cache(maxsize=128) def cached_request(url): return
..
我希望侦听同一对象的多个实例中的事件,然后将此事件流合并为一个流。例如,如果我使用异步生成器: class PeriodicYielder: def __init__(self, period: int) -> None: self.period = period async def updates(self): while True
..
是否可以采用work这样的阻塞函数,并使其在具有多个工作进程的ProcessPoolExecutor中并发运行? import asyncio from time import sleep, time from concurrent.futures import ProcessPoolExecutor num_jobs = 4 queue = asyncio.Queue() executo
..
通常,您可以通过执行以下操作来获取协同例程的结果: async def coro(): await asycnio.sleep(3) return 'a value' loop = asyncio.get_event_loop() value = loop.run_until_complete(coro()) 出于好奇,不使用事件循环获取该值的最简单方法是什么?
..
我正在编写一个工具,该工具连接到X个UNIX套接字,发送命令并将输出保存在本地文件系统中。它每X秒运行一次。为了在工具接收到终止信号时执行一些清理,我将函数(SHUTDOWN)注册到Signal.SIGHUP和Signal.SIGTERM信号。此函数取消所有任务,然后关闭事件循环。 我的问题是我得到了 运行错误:事件循环在将来完成之前停止 当我发送信号.SIGTERM(终止‘pi
..
我有两个进程;一个主进程和子进程。主进程正在运行asyncio事件循环,并启动子进程。我想在子进程中启动另一个异步事件循环。我正在使用aioprocessing模块启动子进程。 子流程函数为: def subprocess_code(): loop = asyncio.get_event_loop() @asyncio.coroutine def f():
..
阅读asyncio documentation时,我意识到我不了解一个非常基本和基本的方面:直接等待协同例程和等待包装在任务中的相同协同例程之间的区别。 在文档示例中,对say_after协程的两个调用在没有create_task等待时顺序运行,在create_task中包装时并发运行。所以我明白这基本上就是不同之处,这是一个相当重要的区别。 然而,让我困惑的是,在我到处阅读的示例代码中(例如
..
我正在编写一个python程序,用于枚举站点的域名。例如,‘a.google.com’。 首先,我使用threading模块完成此操作: import string import time import socket import threading from threading import Thread from queue import Queue ''' enumerate
..
是否可以仅使用Python 3.6.1 Standard Library编写promise(或任务)序列? 例如,JavaScript中的序列承诺写成: const SLEEP_INTERVAL_IN_MILLISECONDS = 200; const alpha = function alpha (number) { return new Promise(function
..