小编Meh*_*IRA的帖子

asyncio和coroutines vs任务队列

我一直在阅读python 3中的asyncio模块,更广泛地讲述python中的协同程序,我无法得到使asyncio成为如此优秀工具的原因.我觉得你可以用协同程序做所有事情,你可以通过使用基于多处理模块的任务队列(例如芹菜)来做得更好.是否存在协同程序优于任务队列的用例?

python task python-asyncio

21
推荐指数
2
解决办法
5563
查看次数

带有 IN 的 postgres 查询非常慢

我有一个表(A 列,B 列)上有一个索引。我正在运行一个如下所示的查询:

SELECT * FROM table WHERE (A, B) IN ((a_1, b_1), (a_2, b_2), ..., (a_5000, b_5000))
Run Code Online (Sandbox Code Playgroud)

这个查询很慢!该计划如下所示:

Bitmap Heap Scan on table
  Recheck Cond: (((A = a_1) AND (B = b_1)) OR ((A = a_2) AND (B = b_2)) OR ...
  ->  BitmapOr
        ->  Bitmap Index Scan on idx
              Index Cond: ((A = a_1) AND (B = b_1))
        ->  Bitmap Index Scan on idx
              Index Cond: ((A = a_2) AND (B = b_2))
        ...(5000 other Bitmax Index Scan) …
Run Code Online (Sandbox Code Playgroud)

sql postgresql postgresql-performance

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

芹菜错误:result.get超时

我已经安装了Celery,并且正在尝试使用Celery First Steps Doc对其进行测试。

我尝试将Redis和RabbitMQ都用作代理和后端,但无法获得结果:

result.get(timeout = 10)
Run Code Online (Sandbox Code Playgroud)

每次,我都会收到此错误:

  Traceback (most recent call last):
  File "<input>", line 11, in <module>
  File "/home/mehdi/.virtualenvs/python3/lib/python3.4/site-packages/celery/result.py", line 169, in get
    no_ack=no_ack,
  File "/home/mehdi/.virtualenvs/python3/lib/python3.4/site-packages/celery/backends/base.py", line 225, in wait_for
    raise TimeoutError('The operation timed out.')
celery.exceptions.TimeoutError: The operation timed out.
Run Code Online (Sandbox Code Playgroud)

经纪人部分似乎工作得很好:当我运行这段代码时

from celery import Celery

app = Celery('tasks', backend='redis://localhost/', broker='amqp://')

@app.task
def add(x, y):
    return x + y

result = add.delay(4,4)
Run Code Online (Sandbox Code Playgroud)

我得到了(按预期)

[2015-08-04 12:05:44,910:INFO / MainProcess]收到的任务:tasks.add [741160b8-cb7b-4e63-93c3-f5e43f8f8a02]

[2015-08-04 12:05:44,911:INFO / MainProcess]任务task.add [741160b8-cb7b-4e63-93c3-f5e43f8f8a02]成功0.0004287530000510742s:8

PS:我正在使用Xubuntu 64bit

编辑: …

python linux rabbitmq redis celery

4
推荐指数
2
解决办法
3530
查看次数

Python日志模块导入不同的脚本

在python日志教程中,有一个带有两个python脚本的例子:myapp.pymylib.py

代码是:

# myapp.py
import logging
import mylib

def main():
    logging.basicConfig(filename='myapp.log', level=logging.INFO)
    logging.info('Started')
    mylib.do_something()
    logging.info('Finished')

if __name__ == '__main__':
    main()
Run Code Online (Sandbox Code Playgroud)

# mylib.py
import logging

def do_something():
    logging.info('Doing something')
Run Code Online (Sandbox Code Playgroud)

我没有得到的是如何使用basicConfigin myapp.py更改日志记录行为mylib.py.

我认为在Python中,当您在两个不同的脚本中导入相同的模块时,它们完全断开连接,因为第一个myapp.logging和第二个完成mylib.logging.

编辑:

我将mylib.py代码更改为

# mylib.py
import logging


def do_something():
    logging.warning('Doing something')


do_something()
Run Code Online (Sandbox Code Playgroud)

当我运行myapp.py时,日志现在在控制台中打印,不再出现在日志文件中.怎么可能?

python logging

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