小编iCa*_*art的帖子

如何在python lambda中使用await

我正在尝试做这样的事情:

mylist.sort(key=lambda x: await somefunction(x))
Run Code Online (Sandbox Code Playgroud)

但我得到这个错误:

SyntaxError: 'await' outside async function
Run Code Online (Sandbox Code Playgroud)

这是有道理的,因为lambda不是异步的.

我尝试使用,async lambda x: ...但抛出一个SyntaxError: invalid syntax.

Pep 492声明:

可以提供异步lambda函数的语法,但是此构造超出了此PEP的范围.

但我无法确定是否在CPython中实现了该语法.

有没有办法声明异步lambda,或使用异步函数排序列表?

python lambda asynchronous python-3.x async-await

16
推荐指数
3
解决办法
9835
查看次数

如何模拟"async with"语句?

我正在尝试为使用"async with"语句的方法编写测试(在这种情况下,aioredis的连接池),我想模拟与redis的连接,但我无法弄清楚如何.

这是我到目前为止所拥有的:

from asyncio import Future
from unittest.mock import MagicMock

import pytest

# The thing i'm trying to test
async def set_value(redis, value):
    # Do things
    async with redis.get() as conn:
        await conn.set("key", value)

#My Mock classes
class MockRedis():
    def get(self):
        return MockAsyncPool()


class MockAsyncPool(MagicMock):
    async def __aenter__(self):
        conn = MagicMock()
        f = Future()
        f.set_result(True)
        conn.set = MagicMock(return_value=f)
        return conn

    def __aexit__(self, exc_type, exc_val, exc_tb):
        pass


# The actual test
@pytest.mark.asyncio
async def test_get_token():
    redis = MockRedis()

    token = …
Run Code Online (Sandbox Code Playgroud)

mocking pytest python-3.x python-asyncio

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

Docker pull:不允许操作

拉动一些泊坞窗图像(但不是全部)时,我收到此错误:

failed to register layer: Error processing tar file(exit status 1): operation not permitted
Run Code Online (Sandbox Code Playgroud)

例如:docker pull nginx工作,但不是docker pull redis.

我得到了相同的结果,我docker使用sudo或root作为组的一部分用户运行命令.

如果我在调试模式下运行dockerd,我会在日志中看到:

DEBU[0025] Downloaded 5233d9aed181 to tempfile /var/lib/docker/tmp/GetImageBlob023191751 
DEBU[0025] Applying tar in /var/lib/docker/overlay2/e5290b8c50d601918458c912d937a4f6d4801ecaa90afb3b729a5dc0fc405afc/diff 
DEBU[0027] Applied tar sha256:16ada34affd41b053ca08a51a3ca92a1a63379c1b04e5bbe59ef27c9af98e5c6 to e5290b8c50d601918458c912d937a4f6d4801ecaa90afb3b729a5dc0fc405afc, size: 79185732 
(...)
DEBU[0029] Applying tar in /var/lib/docker/overlay2/c5c0cfb9907a591dc57b1b7ba0e99ae48d0d7309d96d80861d499504af94b21d/diff 
DEBU[0029] Cleaning up layer c5c0cfb9907a591dc57b1b7ba0e99ae48d0d7309d96d80861d499504af94b21d: Error processing tar file(exit status 1): operation not permitted 
INFO[0029] Attempting next endpoint for pull after error: failed to register layer: Error processing …
Run Code Online (Sandbox Code Playgroud)

docker

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

git pull 直到有东西可以拉

有没有办法git pull直到有东西可以拉。

假设我正在等待一位同事推送他的最新更改,因为我不耐烦并且不看他的屏幕,我只是运行watch git pull直到我看到有东西被拉出,但我可能会错过这一刻并浪费一点比必要的时间更多。(注意:是的,这是一个非常小的不便,但仍然是不便:))

git pull似乎没有不同的返回值,无论它是否实际拉了一些东西,但也许有一些我不知道的晦涩的、未记录的选项?

编辑: 感谢您的回答,我将其添加到我的 .zshrc 中:

alias gitpullwait="git pull | grep "已经是最新的" > /dev/null; while [ $? -ne 1 ]; do git pull | grep "已经是最新的" > /dev/null;完成;通知发送拉 f$

它看起来很丑,但对我有用。

git pull wait

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

可以有多个Vuejs实例吗?

考虑一下现实应用程序的以下简化示例:

<html>
  <body>
    <script src="https://unpkg.com/vue"></script>
    <div id="app">
      <div id="subapp">
        <p>
          {{ message}}
        </p>
      </div>
      <p>{{ message }}</p>
    </div>

    <script>
      new Vue({
        el: '#app',
        data: {
          message: 'Hello Vue.js!'
        }
      })

      new Vue({
        el: '#subapp',
        data: {
          message: '¡Hola Vue.js!'
        }
      })

    </script>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

我希望看到两条不同的消息,但两次却收到同一条消息。如果我更改messageother_message“ subapp”,Vuejs会抱怨找不到它other_message

有没有办法将它们“嵌入”在一起?缺少取消嵌入html部分或合并控制器的方法,有没有办法获得预期的结果?另外,对于我要完成的工作,是否有更好的术语?(有时候英语很难)

vue.js

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