小编Ben*_*ari的帖子

与asyncio有限的并发性

假设我们有一堆下载链接,每个链接可能需要不同的下载时间.我只允许使用最多3个连接下载.现在,我想确保使用asyncio有效地执行此操作.

这就是我想要实现的目标:在任何时候,尽量确保我至少运行3次下载.

Connection 1: 1---------7---9---
Connection 2: 2---4----6-----
Connection 3: 3-----5---8-----
Run Code Online (Sandbox Code Playgroud)

数字代表下载链接,而连字符代表等待下载.

这是我正在使用的代码

from random import randint
import asyncio

count = 0


async def download(code, permit_download, no_concurrent, downloading_event):
    global count
    downloading_event.set()
    wait_time = randint(1, 3)
    print('downloading {} will take {} second(s)'.format(code, wait_time))
    await asyncio.sleep(wait_time)  # I/O, context will switch to main function
    print('downloaded {}'.format(code))
    count -= 1
    if count < no_concurrent and not permit_download.is_set():
        permit_download.set()


async def main(loop):
    global count
    permit_download = asyncio.Event()
    permit_download.set()
    downloading_event = asyncio.Event()
    no_concurrent = 3 …
Run Code Online (Sandbox Code Playgroud)

python concurrency asynchronous python-3.x python-asyncio

18
推荐指数
7
解决办法
7185
查看次数

"git push"和"git push origin master"有什么区别?

经过一段时间git commit,我有两个选择:

  1. git push
  2. git push origin master

我的目的是将我在本地仓库中的更改推送到GitHub主分支.他们在什么情况下有所作为?

(另外,这里的"起源"是什么意思?)


[UPDATE]:

我认为这篇文章并不是一个重复的问题,因为在上面提到的重复帖子中,关于git push origin和在这个问题上的问题git push仅仅是关于.

git github git-push

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

Python上的信号量

几个星期前我开始用Python编程,并试图使用Semaphores同步两个简单的线程,用于学习目的.这是我得到的:

import threading
sem = threading.Semaphore()

def fun1():
    while True:
        sem.acquire()
        print(1)
        sem.release()

def fun2():
    while True:
        sem.acquire()
        print(2)
        sem.release()

t = threading.Thread(target = fun1)
t.start()
t2 = threading.Thread(target = fun2)
t2.start()
Run Code Online (Sandbox Code Playgroud)

但它一直打印只有1.如何对照片进行内部缩放?

python multithreading semaphore python-multithreading

14
推荐指数
3
解决办法
3万
查看次数

Python:异步线程有什么优势?

我很难理解如何以及为什么异步功能在python中工作,我仍然不确定我是否正确理解了所有内容(特别是'为什么'部分).如果我错了,请纠正我.

异步方法和线程的目的是使同时处理多个任务成为可能.

线程方法看起来简单直观.如果python程序同时处理多个任务,我们每个任务都有一个线程(可能有子线程),每个线程的堆栈反映了当前处理相应任务的阶段.一切都很简单,有一些易于使用的机制来启动新线程并等待它的结果.

据我所知,这种方法的唯一问题是线程很昂贵.

另一种方法是使用async协同程序.我可以通过这种方法看到一些不便之处.我只会说出几个人的名字.我们现在有两种方法:通常的方法和async方法.90%的时间唯一的区别是你需要记住这个方法是,async并且await在调用此方法时不要忘记使用关键字.是的,你不能async从正常方法中调用方法.所有这些async- await程序周围的语法垃圾只是表明这种方法能够控制消息循环.

线程方法没有所有这些不便之处.但是async- await方法允许处理比线程方法更多的并发任务.怎么可能?

对于每个并发任务,我们仍然有一个调用堆栈,现在它只是一个协程调用堆栈.我不太确定,但看起来这是关键的区别:通常的堆栈是操作系统堆栈,它们很昂贵,协程栈只是一个python结构,它们便宜得多.这是我的理解吗?

如果这是正确的,那么从操作系统线程/调用堆栈中解除python线程/调用堆栈以使python线程更便宜会不会更好?

对不起,如果这个问题很愚蠢.我确信有一些原因async- await选择了方法.只是想了解这些原因.

更新:

对于那些不认为这个问题不好而且过于宽泛的人.

这是一篇不屈不挠的文章- 首先解释为什么线程不好而广告async接近.主要论点:线程是邪恶的,很难推断可以同时从任意数量的线程执行的例程.

感谢Nathaniel J. Smith(python Trio图书馆的作者)建议这个链接.

顺便说一句,文章中的论点对我来说并不令人信服,但仍然有用.

python multithreading asynchronous async-await python-asyncio

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

AttributeError:模块'asyncio'没有属性'create_task'

我正在尝试,asyncio.create_task()但我处理这个错误:

这是一个例子:

import asyncio
import time

async def async_say(delay, msg):
    await asyncio.sleep(delay)
    print(msg)

async def main():
    task1 = asyncio.create_task(async_say(4, 'hello'))
    task2 = asyncio.create_task(async_say(6, 'world'))

    print(f"started at {time.strftime('%X')}")
    await task1
    await task2
    print(f"finished at {time.strftime('%X')}")

loop = asyncio.get_event_loop()
loop.run_until_complete(main())
Run Code Online (Sandbox Code Playgroud)

日期:

AttributeError: module 'asyncio' has no attribute 'create_task'
Run Code Online (Sandbox Code Playgroud)

所以我尝试使用以下代码段代码(.ensure_future())代替,没有任何问题:

async def main():
    task1 = asyncio.ensure_future(async_say(4, 'hello'))
    task2 = asyncio.ensure_future(async_say(6, 'world'))

    print(f"started at {time.strftime('%X')}")
    await task1
    await task2
    print(f"finished at {time.strftime('%X')}")

loop = asyncio.get_event_loop()
loop.run_until_complete(main())
Run Code Online (Sandbox Code Playgroud)

日期:

started at 13:19:44 …
Run Code Online (Sandbox Code Playgroud)

python python-3.x async-await python-asyncio python-3.6

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

如何将诗歌构建的Python包添加到另一个带有诗歌的Python项目中?

我正在研究两个项目,我们称它们为Project AProject B

Project B需要一些模块Project A,所以我做了一个poetry buildon Project Apip install dist/blabla.whl当我手动对诗歌生成的构建执行 a 时,我能够访问该模块Project A

但是当我做 a 时poetry add project-a git+ssh://git@gitlab.blabla.co/nubela/project-a.git#develop,它说

找不到包项目-a的匹配版本

当然,我理解,因为project-a它不是经典地与 setup.py 之类的东西一起打包的。那么我如何在poetry add <git-repo-uri>不涉及自托管 pypi 实例的情况下执行?

我可以将 .whl 文件推送到项目 git 存储库,这有帮助吗?

python python-poetry

12
推荐指数
2
解决办法
3万
查看次数

SOCK_STREAM的功能是什么?

我正在学习Python中的套接字并想出来

variable = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Run Code Online (Sandbox Code Playgroud)

我明白这个功能socket.socketsocket.AF_INET,但我很好奇socket.SOCK_STREAM.它的功能是什么?

python sockets python-sockets

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

蟒蛇.从data.frame获取结构

在R中,通过该str()函数,您可以看到来自这样的对象的结构:

> str(mari)
'data.frame':   25834 obs. of  6 variables:
 $ Xcoor: num  0.0457 0.0469 0.0481 0.0495 0.0519 ...
 $ Ycoor: num  0.107 0.107 0.107 0.108 0.108 ...
 $ Zcoor: num  -0.701 -0.701 -0.701 -0.703 -0.703 ...
 $ RC   : int  120 124 124 125 124 122 120 120 120 120 ...
 $ GC   : int  121 117 117 117 118 119 120 120 120 120 ...
 $ BC   : int  127 135 144 135 126 127 125 125 …
Run Code Online (Sandbox Code Playgroud)

python r pandas

11
推荐指数
3
解决办法
2万
查看次数

Django 记录请求

我在aws弹性 beantalk 中使用 django 1.11并且我一直试图让我的应用程序在没有运气的情况下登录。. .

我的 settings.py 中有这些

LOGGING_CONFIG = None
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'file': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': '/opt/python/current/app/staging.log',
        },
    },
    'loggers': {
        '': {
            'handlers': ['file'],
            'level': 'DEBUG',
            'propagate': True,
        },
        'django': {
            'handlers': ['file'],
            'level': 'DEBUG',
            'propagate': True,
        },
        'django.request': {
            'handlers': ['file'],
            'level': 'DEBUG',
            'propagate': True,
        },
    },
}
import logging.config
logging.config.dictConfig(LOGGING)
Run Code Online (Sandbox Code Playgroud)

然后我尝试调用我的一个 API 并期望日志中显示某些内容,但它没有。我django.request记录器应该自动记录所有传入的请求还是我必须创建一个中间件logger.debug('something')

登录 django 比我想象的要复杂得多:(

python django logging

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

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