小编use*_*248的帖子

在协程中使用全局状态变量?

我正在使用 discord.py 库构建一个 discord bot - 因此所有用户交互都必须在协程中进行,使用 async 定义并使用 await 调用。

我的一个函数将需要一个保存的状态变量 - 计算中使用的时间偏移量,偶尔需要由用户手动更新。

我不能在主线程中使用普通的全局变量——协程看不到它们。在多个协程之间保留状态变量的明智设计模式是什么?

python global-variables coroutine

8
推荐指数
1
解决办法
546
查看次数

在循环结束之前从python协同程序收集结果

我有一个用discord.py构建的python discord bot,这意味着整个程序在一个事件循环中运行.

我正在处理的函数涉及发出数百个HTTP请求并将结果添加到最终列表中.按顺序执行这些操作大约需要两分钟,所以我使用aiohttp使它们异步.我的代码的相关部分与aiohttp文档中的quickstart示例相同,但它抛出了一个RuntimeError:Session已关闭.该方法取自https://pawelmhm.github.io/asyncio/python/aiohttp/2016/04/22/asyncio-aiohttp.html "获取多个URL"下的示例.

async def searchPostList(postUrls, searchString)
    futures = []
    async with aiohttp.ClientSession() as session:
        for url in postUrls:
            task = asyncio.ensure_future(searchPost(url,searchString,session))
            futures.append(task)

    return await asyncio.gather(*futures)


async def searchPost(url,searchString,session)):
    async with session.get(url) as response:
        page = await response.text()

    #Assorted verification and parsing
    Return data
Run Code Online (Sandbox Code Playgroud)

我不知道为什么这个错误会出现,因为我的代码与两个可能的功能示例非常相似.事件循环本身工作正常.它永远运行,因为这是一个机器人应用程序.

python asynchronous aiohttp

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

ts-node 和 ESM:未知文件扩展名“.ts”

我在使用 ts-node 和 ESM 构建项目时遇到了巨大的麻烦。关于这个主题还有其他几个问题,但我已经尝试了所有这些问题的解决方案,但一无所获。很难判断哪些信息已经过时,大多数答案都涉及在配置中添加其他选项,这对我的情况似乎没有任何影响。

这是演示设置:

节点 v20.4

Package.json 的类型为:“module”

作为我当前使用的启动脚本npx ts-node-esm src/index.ts

ts-node 和 Typescript 都安装在项目本地

tsconfig.json如下:

{
    "compilerOptions": {
      "target": "ESNext",
      "baseUrl": ".",
      "esModuleInterop": true,
      "moduleResolution": "NodeNext",
      "module": "ESNext",
    },
    "types": ["node"]
}
Run Code Online (Sandbox Code Playgroud)

我们的演示文件 - src/index.ts:

import { sayHi } from "src/helpers.js";
sayHi();
Run Code Online (Sandbox Code Playgroud)

和 src/helpers.ts:

export function sayHi() { console.log('hi!') }
Run Code Online (Sandbox Code Playgroud)

到目前为止,我当前在运行时遇到的错误是Unknown file extension ".ts" for src\index.ts

(我了解到“tsx”可能会起作用,但如果我这里发生配置错误,我想了解出了什么问题。)

除了手头的实际问题之外,我也不介意一些更广泛的建议。这实际上明智吗?我读到的所有内容都表明新项目应该使用 ESM,因为 CommonJs 没有特别的优势(前提是您可以使 ESM 工作......)。同时,ts-node(或类似的)的功能对于实现快速开发反馈循环的作用似乎非常重要。考虑到这两个事实,我很惊讶我在设置它时遇到了这么多麻烦。

javascript node.js typescript ts-node

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