我觉得我对异步 IO 的理解存在差距:在较大的协程范围内将小函数包装到协程中是否有好处? 正确地发出事件循环信号有好处吗?这种好处的程度是否取决于包装的函数是 IO 还是 CPU 密集型?
示例:我有一个协程,download()其中:
aiohttp。bz2.compress()- 这本身不是可等待的aioboto3因此,第 1 部分和第 3 部分使用这些库中的预定义协程;默认情况下,第 2 部分没有。
简化的例子:
import bz2
import io
import aiohttp
import aioboto3
async def download(endpoint, bucket_name, key):
    async with aiohttp.ClientSession() as session:
        async with session.request("GET", endpoint, raise_for_status=True) as resp:
            raw = await resp.read()  # payload (bytes)
            # Yikes - isn't it bad to throw a …Run Code Online (Sandbox Code Playgroud) 我正在按照文档为 Django Channels 应用程序编写测试。我可以成功测试与 WebSocket 使用者的连接和通信。但是,在其中一项测试中我需要创建一个用户。
这是我的测试方法:
@pytest.mark.django_db
@pytest.mark.asyncio
async def test_1():
    my_user = get_user_model().objects.create_user(username='my_user', email='user@user.com', password='123456')
    my_user.save()
    print(User.objects.all())
    communicator = WebsocketCommunicator(MyConsumer, '/websocket/')
    communicator.instance.scope['user'] = my_user
    connected, subprotocol = await communicator.connect()
    assert connected
    await communicator.send_json_to({
        'command': 'test',
    })
    response = await communicator.receive_json_from(timeout=5)
    await communicator.disconnect()
Run Code Online (Sandbox Code Playgroud)
该错误发生在处理该案例的方法内部'command' == 'test'。当它尝试保存另一个以 User 作为外键的模型实例时,测试失败。
client = Client(user=scope['user'])
client.save()
Run Code Online (Sandbox Code Playgroud)
如果我将 a 添加print(User.objects.all())到使用者内部的方法(前两行之间),它将返回一个空的 QuerySet,而print测试方法本身中的第一个返回创建的用户。当然,由于没有用户,测试失败并显示:
django.db.utils.IntegrityError: insert or update on table "chat_client" violates foreign key constraint "chat_client_user_id_d10928fc_fk_auth_user_id"
DETAIL:  Key (user_id)=(1) is …Run Code Online (Sandbox Code Playgroud) 我有这样的结构:
 |- file run_app.py
 |- folder 'tasks'
 |-- file app.py
Run Code Online (Sandbox Code Playgroud)
中有一个字符串run_app.py:
import tasks.app
Run Code Online (Sandbox Code Playgroud)
并且 pylint 警告说
run_app.py:8:0: E0611: No name 'app' in module 'tasks' (no-name-in-module)
Run Code Online (Sandbox Code Playgroud)
当我重命名tasks为 时taskss,错误消失。这是什么?如果我想将文件夹完全命名为“任务”,如何解决这种奇怪的行为?
考虑两个列表:
list1=[-4,-5,-3]
list2=['-4','-5','-3']
Run Code Online (Sandbox Code Playgroud)
现在,如果我们使用
list1.sort()
list2.sort() # in python3 
Run Code Online (Sandbox Code Playgroud)
我们得到矛盾的结果:
[-5, -4, -3]
['-3', '-4', '-5']`
Run Code Online (Sandbox Code Playgroud)
为什么会这样,我们怎么做才能正确!!
此代码失败:
import asyncio
from motor import motor_asyncio
_client = motor_asyncio.AsyncIOMotorClient()
_db = _client.db
users = _db.users
async def main():
    await users.create_index(
        'login',
        unique=True
    )
if __name__ == '__main__':
    #loop = asyncio.get_event_loop()
    #loop.run_until_complete(main())
    asyncio.run(main())
Run Code Online (Sandbox Code Playgroud)
出现此错误:
Traceback (most recent call last):
  File "/home/sanyash/myrepos/TKP/db.py", line 21, in <module>
    asyncio.run(main())
  File "/usr/local/lib/python3.7/asyncio/runners.py", line 43, in run
    return loop.run_until_complete(main)
  File "/usr/local/lib/python3.7/asyncio/base_events.py", line 584, in run_until_complete
    return future.result()
  File "/home/sanyash/myrepos/TKP/db.py", line 14, in main
    unique=True
RuntimeError: Task <Task pending coro=<main() running at /home/sanyash/myrepos/TKP/db.py:14> cb=[_run_until_complete_cb() at /usr/local/lib/python3.7/asyncio/base_events.py:158]> …Run Code Online (Sandbox Code Playgroud) 如何将对象 id 转换为字符串,以便可以将其与 $eq 中的字符串进行比较。蒙戈版本 - 4.0
db.user.aggregate([{ 
 $lookup:{
     from: "sometable",
     let:{user:["$_id"]},
                         pipeline:[{ 
                                $match: {
                                    $expr: {
                                        $and:[
                                            {
                                                $eq: [ "$userId", "$$user"]
                                              },
                                            {
                                                $gt: [ "$lastBalance", 0]
                                              }
                                            ]
                                           }
                                        }
                            }
                            ],
     as: "response"
  },
}])
Run Code Online (Sandbox Code Playgroud) 尝试在python中使用递归实现算法。似乎缺少一些我无法调试的东西。
我的方法是具有两个递归分支,并在每次递归时传递一个元素。详细信息如下:
## input pattern : "ab"
## output pattern : ["", "a", "b", "ab"]
Run Code Online (Sandbox Code Playgroud)
#           "ab" [ROOT]
#                   |
#           -a           +a
#           |             |
#       -b      +b    -b    +b
# =>    ""      "b"     "a"     "ab"
Run Code Online (Sandbox Code Playgroud)
我现有的代码如下:无法正常工作。
def gen_subset(slist):
    def helper(slist,i,temp,out):
        if len(slist) == i:
            out.append(temp)
            return()
        else:
            helper(slist,i+1,temp,out)
            temp.append(slist[i])
            helper(slist,i+1,temp,out)
    out = []
    helper(slist,0,[],out)
    return out
s = "ab"
print (gen_subset([c for c in s]))
Run Code Online (Sandbox Code Playgroud)
此代码产生错误的结果。
输出量
[['b', 'a', 'b'], ['b', 'a', 'b'], ['b', 'a', 'b'], ['b', …Run Code Online (Sandbox Code Playgroud)