我正在尝试运行在 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 附加到不同的循环")>
请解释一下出了什么问题以及如何解决?
我想从异步进程打开文件,并且我注意到可以使用两个不同的模块:aiofiles 和 aiofile。但是,我似乎没有找到有关两者之间优缺点的信息。
有人知道他们的主要区别吗?它们中的任何一个比另一个更广泛使用吗?
谢谢
我使用 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) 我有一个带有异步 sqlalchemy 的异步 FastApi 应用程序,源代码:
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)
import .database
from fastapi_utils.cbv import cbv
from …Run Code Online (Sandbox Code Playgroud) 好的,所以我正在对 进行比较研究using ASYNC vs without using ASYNC in FastAPI。然而,我得到了一些意想不到的结果,并且不明白为什么。
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) 我正在开发一个使用异步 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) 下面的示例仅将 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) 我试图在 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) 考虑以下代码:
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) 我在 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-asyncio ×10
python ×7
aiohttp ×2
asyncpg ×2
fastapi ×2
celery ×1
coroutine ×1
exception ×1
mongodb ×1
odm ×1
playwright ×1
postgresql ×1
python-3.10 ×1
python-3.8 ×1
python-3.x ×1
scrapy ×1
sqlalchemy ×1
starlette ×1
uvicorn ×1