标签: python-asyncio

python - ThreadedWebsocketManager - 从未检索到任务异常

我正在尝试运行在 jupyter 笔记本上找到的教程中的以下代码:

from time import sleep

from binance import ThreadedWebsocketManager

btc_price = {'error':False}

def btc_trade_history(msg):

    if (msg['e'] != 'error'):

        print(msg['c'])

        btc_price['last'] = msg['c']

        btc_price['bid'] = msg['b']

        btc_price['last'] = msg['a']

        btc_price['error'] = False

    else:

        btc_price['error'] = True

bsm = ThreadedWebsocketManager()

bsm.start()

bsm.start_symbol_ticker_socket(callback=btc_trade_history, symbol='BTCUSDT')
Run Code Online (Sandbox Code Playgroud)

这是教程本身的链接:https ://algotrading101.com/learn/binance-python-api-guide/

我想,自从编写了教程以来,binance API 中发生了一些变化,所以我收到以下错误:

取消 read_loop 未来从未检索到任务异常:<任务完成名称='Task-14'coro=<ThreadedApiManager.start_listener()完成,在C:\Users\myusername\Anaconda3\lib\site-packages\binance\threaded_stream中定义。 py:42> 异常=RuntimeError("任务 <任务挂起名称='Task-20' coro=<Queue.get() 在 C:\Users\myusername\Anaconda3\lib\asyncio\queues.py:163 运行> cb =[_release_waiter(()]>)() at C:\Users\myusername\Anaconda3\lib\asyncio\tasks.py:429]> 让 Future 附加到不同的循环")>

请解释一下出了什么问题以及如何解决?

python python-asyncio binance-api-client

5
推荐指数
1
解决办法
2244
查看次数

AIO 文件 VS AIO 文件

我想从异步进程打开文件,并且我注意到可以使用两个不同的模块:aiofiles 和 aiofile。但是,我似乎没有找到有关两者之间优缺点的信息。

有人知道他们的主要区别吗?它们中的任何一个比另一个更广泛使用吗?

谢谢

python-asyncio

5
推荐指数
1
解决办法
2296
查看次数

类型错误:“协程”对象不可迭代

我使用 Aiohttp 服务器和 python-socket-io 构建了一个聊天应用程序。当我尝试在 nginx 中托管此应用程序时,我在主管错误日志中发现了此错误(错误日志路径= /var/log/gunicorn/gunicorn.err.log )

[2022-05-27 04:16:31 +0000] [32957] [ERROR] Error handling request
/chatserver Traceback (most recent call last):
File "/home/ubuntu/env/lib/python3.8/site-packages/gunicorn/workers/sync.py", line 136, in handle
    self.handle_request(listener, req, client, addr)
File "/home/ubuntu/env/lib/python3.8/site-packages/gunicorn/workers/sync.py", line 184, in handle_request
    for item in respiter:
TypeError: 'coroutine' object is not iterable
Run Code Online (Sandbox Code Playgroud)

这是我的 aiohttp 服务器设置。

import socketio
from aiohttp import web
import aiohttp_cors


# create aiohttp application
app = web.Application()   


# creates a new Async Socket IO Server
sio = socketio.AsyncServer(
    cors_allowed_origins='*',
    cors_credentials=True …
Run Code Online (Sandbox Code Playgroud)

python coroutine python-asyncio aiohttp python-socketio

5
推荐指数
1
解决办法
2万
查看次数

FastApi 中带有 asyncpg 的大量资源警告

我有一个带有异步 sqlalchemy 的异步 FastApi 应用程序,源代码:

数据库.py

from sqlalchemy import (
    Column,
    String,
)
from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from sqlalchemy.orm.decl_api import DeclarativeMeta

from app.config import settings


engine = create_async_engine(settings.DATABASE_URL, pool_per_ping=True)
Base: DeclarativeMeta = declarative_base()
async_session = sessionmaker(engine, class_=AsyncSession, expire_on_commit=False)


class Titles(Base):
    __tablename__ = "titles"
    id = Column(String(100), primary_key=True)
    title = Column(String(100), unique=True)


async def get_session() -> AsyncSession:
    async with async_session() as session:
        yield session
Run Code Online (Sandbox Code Playgroud)

路由器.py

import .database
from fastapi_utils.cbv import cbv
from …
Run Code Online (Sandbox Code Playgroud)

python-asyncio asyncpg fastapi

5
推荐指数
1
解决办法
1145
查看次数

为什么 UVICORN/Starlette/FastAPI 在不使用“ASYNC”时会产生更多线程,而在使用“ASYNC”时却不会?

好的,所以我正在对 进行比较研究using ASYNC vs without using ASYNC in FastAPI。然而,我得到了一些意想不到的结果,并且不明白为什么。

这是设置 1:

不使用异步的 API

import uvicorn
from fastapi import FastAPI
import PIL.Image as Image
import requests
from loguru import logger
import sys

log_format = "{level} {process}-{thread} {time} {name}:{line} - {message}"
logger.remove()
logger.add(sys.stderr, format=log_format, backtrace=True, diagnose=True)
logger.add("logs/" + "t_{time}.log", format=log_format, colorize=True, backtrace=True, diagnose=True)

Image.MAX_IMAGE_PIXELS = None

def get_the_image_from_net():
    a = requests.get("https://eoimages.gsfc.nasa.gov/images/imagerecords/73000/73751/world.topo.bathy.200407.3x21600x21600.A1.jpg")
    return True


app = FastAPI()

@app.get("/expectoPatronum")
def get_image_of_the_new_world():
    """
    Gets Image of the World
    """
    logger.info("Received request for getting …
Run Code Online (Sandbox Code Playgroud)

python python-asyncio starlette fastapi uvicorn

5
推荐指数
1
解决办法
6772
查看次数

如何处理 Sqlalchemy 中的 asyncpg.exceptions.TooManyConnectionsError

我正在开发一个使用异步 SQLAlchemy 连接asyncpg到 PostgreSQL 数据库的项目。问题是这样的:当我与数据库建立太多连接时,它会引发以下异常:

asyncpg.exceptions.TooManyConnectionsError: sorry, too many clients already
Run Code Online (Sandbox Code Playgroud)

这基本上是 Postgres 本身和配置的限制。但遗憾的是,会话无法处理此问题,例如尝试多次连接。是否有任何解决方法可以使其无异常地工作?

这是设置:

asyncpg.exceptions.TooManyConnectionsError: sorry, too many clients already
Run Code Online (Sandbox Code Playgroud)

postgresql sqlalchemy exception python-asyncio asyncpg

5
推荐指数
1
解决办法
1522
查看次数

继续得到'asyncio.exceptions.TimeoutError'

下面的示例仅将 1 个元素添加到事件循环中,并使用变量asins。

asyncio.exceptions.TimeoutError当asins下面的参数为 180 个元素或更长时,我收到错误。

如果我创建包含这 180 个元素中的任何一个的列表,我会得到成功的响应,这告诉我下面的问题与 API 无关。

谁能告诉我如何解决这个问题?谢谢你!

import asyncio
import aiohttp
import sys
import pandas as pd

def create_params(asins_set):
    params = []
    for asin in asins_set:
        param = {
            'api_key': '...',
            'type': 'product',
            'amazon_domain': 'amazon.com',
            'asin': asin,
        }
        params.append(param)
    return params

if sys.version_info[0] == 3 and sys.version_info[1] >= 8 and sys.platform.startswith('win'):
    asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())

# creates a list of tasks to add to the event loop at once
def get_tasks(session, params):
    tasks …
Run Code Online (Sandbox Code Playgroud)

python python-asyncio aiohttp

5
推荐指数
1
解决办法
908
查看次数

安装的 Reactor 与请求的不匹配

我试图在 Quotes.toscrape.com/scroll 上运行滚动示例时运行 scrape-playwrights 文档上的示例,但由于反应器问题,我什至无法进行抓取:

URL SPIDER TEST
***********************
SCRAPE STARTED
***********************
2022-08-11 15:47:38 [scrapy.crawler] INFO: Overridden settings: {'TWISTED_REACTOR': 'twisted.internet.asyncioreactor.AsyncioSelectorReactor'} crawled: <Deferred at 0x11ef17e50 current result: <twisted.python.failure.Failure builtins.Exception: The installed reactor (twisted.internet.selectreactor.SelectReactor) does not match the requested one (twisted.internet.asyncioreactor.AsyncioSelectorReactor)>>
Run Code Online (Sandbox Code Playgroud)

代码是:

import csv
import json
import pygsheets
import scrapy
from scrapy_playwright.page import PageMethod
import json
from scrapy.utils.log import configure_logging
from scrapy.utils.project import get_project_settings
from scrapy.utils.reactor import install_reactor
from scrapy.crawler import CrawlerProcess
from scrapy.crawler import CrawlerRunner
import datetime as dt
from datetime …
Run Code Online (Sandbox Code Playgroud)

python scrapy python-asyncio playwright

5
推荐指数
1
解决办法
1615
查看次数

asyncio:适用于 Python 3.10,但不适用于 Python 3.8

考虑以下代码:

import asyncio

sem: asyncio.Semaphore = asyncio.Semaphore(2)


async def async_run() -> None:
    async def async_task() -> None:
        async with sem:
            await asyncio.sleep(1)
            print('spam')

    await asyncio.gather(*[async_task() for _ in range(3)])


asyncio.run(async_run())
Run Code Online (Sandbox Code Playgroud)

使用Python 3.10.6(Fedora 35)运行,它的工作方式就像教科书上的一样。

但是,当我使用 Python 3.8.10 (Ubuntu 20.04) 运行它时,出现以下错误:

Traceback (most recent call last):
  File "main.py", line 21, in <module>
    asyncio.run(async_run())
  File "/usr/lib/python3.8/asyncio/runners.py", line 44, in run
    return loop.run_until_complete(main)
  File "/usr/lib/python3.8/asyncio/base_events.py", line 616, in run_until_complete
    return future.result()
  File "main.py", line 18, in async_run
    print(future_entry_index, await future_entry)
  File "/usr/lib/python3.8/asyncio/tasks.py", line 619, …
Run Code Online (Sandbox Code Playgroud)

python python-3.x python-asyncio python-3.8 python-3.10

5
推荐指数
1
解决办法
2864
查看次数

事件循环在芹菜工作人员中关闭

我在 celery Worker 内部使用异步 ODM 时遇到多个问题首先,我无法使用 celery Worker 信号初始化我的数据库模型,我正在使用 beanie 进行数据库连接。

第一次实施

from asyncer import syncify
from asgiref.sync import async_to_sync 
client = AsyncIOMotorClient(
    DATABASE_URL, uuidRepresentation="standard" )
    db = client[DB_NAME]

async def db_session():
        await init_beanie(
        database=db,
        document_models=[Project, User],
    )
@worker_ready.connect
def startup_celery_ecosystem(**kwargs):
            logger.info('Startup celery worker process')
            async_to_sync(db_session)()
            logger.info('FINISHED : Startup celery worker process')
async def get_users():
    users = User.find()
    users_list = await users.to_list()
    return users_list

@celery_app.task
def pool_db():
    async_to_sync(get_users)()
    #syncify(get_users)() same error User class is not initialized yet (init_beanie should have …
Run Code Online (Sandbox Code Playgroud)

python mongodb celery odm python-asyncio

5
推荐指数
1
解决办法
1809
查看次数