看来python的asyncio是一种要么全有要么全无的交易。具体来说,它似乎强制完整的调用堆栈具有异步意识。
这是一个例子:
我们假设有一个由函数a()实现的算法。
该算法调用函数b()。
def a(b):
for i in ...:
# do smth...
res = b()
# do smth more ...
Run Code Online (Sandbox Code Playgroud)
现在我们假设函数b()在不同的环境中可能有不同的实现方式,并且可能希望在异步事件循环(使用Loop.call_soon() )内调用a() ,并使用b()调用一些异步感知代码:
def b():
await .... # this forces b() to be declared async.
Run Code Online (Sandbox Code Playgroud)
使用现有的事件循环似乎被明确禁止...那么,是否有方法可以实现此功能而不强制将整个堆栈(a()和b())显式定义为异步协程?
我似乎在pandas.Timestamp与python常规datetime()对象上遇到意外缓慢的算术运算性能.
以下是一个基准测试:
import datetime
import pandas
import numpy
# using datetime:
def test1():
d1 = datetime.datetime(2015, 3, 20, 10, 0, 0)
d2 = datetime.datetime(2015, 3, 20, 10, 0, 15)
delta = datetime.timedelta(minutes=30)
count = 0
for i in range(500000):
if d2 - d1 > delta:
count += 1
# using pandas:
def test2():
d1 = pandas.datetime(2015, 3, 20, 10, 0, 0)
d2 = pandas.datetime(2015, 3, 20, 10, 0, 15)
delta = pandas.Timedelta(minutes=30)
count = 0
for i in range(500000):
if …Run Code Online (Sandbox Code Playgroud)