我对如何在python/twisted中编写异步代码感到有点困惑.假设(为了论证)我向世界公开一个函数,它接受一个数字并返回True/False,如果它是素数/非素数,所以它看起来像这样模糊:
def IsPrime(numberin):
for n in range(2,numberin):
if numberin % n == 0: return(False)
return(True)
Run Code Online (Sandbox Code Playgroud)
(只是为了说明).
现在假设有一个网络服务器需要根据提交的值调用IsPrime.这需要很长时间才能完成numberin.
如果同时另一个用户请求一个小数的素数,有没有办法使用reactor/deferreds架构异步运行两个函数调用,以便在长计算结果之前返回短计算结果?
我知道如果IsPrime功能来自我的网络服务器将执行延迟的getPage的其他一些网络服务器,该怎么做呢,但如果它只是一个本地功能呢?
即,可以在两次调用IsPrime之间以某种方式进行Twisted时间共享,还是需要显式调用新线程?
或者,IsPrime循环是否需要分成一系列较小的循环,以便控制可以快速传递回反应堆?
或者是其他东西?
我有来自csv的数据,它有几千列和一万(左右)行.在每列中,数据具有相同的类型,但不同的列具有不同类型的数据*.以前我一直在从numpy和磁盘上存储数据,但它很慢,特别是因为通常我想加载一些列的子集而不是所有列.
我想使用pytables将数据放入hdf5,我的第一种方法是将数据放在一个表中,每个csv列有一个hdf5列.不幸的是,这不起作用,我假设因为512(软)列限制.
存储此数据的合理方法是什么?
*我的意思是,从文本转换后的数据类型.
我有一个程序来处理嵌套数据结构,其中底层类型通常最终为小数.例如
x={'a':[1.05600000001,2.34581736481,[1.1111111112,9.999990111111]],...}
Run Code Online (Sandbox Code Playgroud)
是否有一种简单的pythonic方法来打印这样的变量,但将所有浮点数舍入到(例如)3dp并且不假设列表和字典的特定配置?例如
{'a':[1.056,2.346,[1.111,10.000],...}
Run Code Online (Sandbox Code Playgroud)
我想的是
pformat(x,round=3)或许也许
pformat(x,conversions={'float':lambda x: "%.3g" % x})
Run Code Online (Sandbox Code Playgroud)
除了我不认为他们有这种功能.永久舍入基础数据当然不是一种选择.
我想测试 python 3 coro 是否因特定异常而失败,但似乎没有实现此功能。
async with self.assertRaises(TestExceptionType):
await my_func()
Run Code Online (Sandbox Code Playgroud)
因为单元测试像这样失败:
...
File "/Users/...../tests.py", line 144, in go
async with self.assertRaises(TestExceptionType):
AttributeError: __aexit__
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:这应该有效吗?如果没有,断言失败的异步功能的最佳方法是什么?
我期待用RabbitMQ实现优先级队列.邮件列表建议使用多个队列,每个队列代表不同的优先级.
我的问题是,如何使用pika(或可能是其他一些python库)以某些优先顺序轮询多个队列?
我使用raven和getsentry在django中记录消息,但是日志记录似乎延迟了代码的执行.例如:
# ...view code
tic = datetime.datetime.now()
logging.warning('foo warning')
toc = datetime.datetime.now()
print "log time %s, %s, %s" % (tic, toc, (toc - tic).total_seconds())
# more view code...
Run Code Online (Sandbox Code Playgroud)
给出输出:
log time 2013-09-25 12:03:56.541091, 2013-09-25 12:03:57.139420, 0.598329
Run Code Online (Sandbox Code Playgroud)
ie it's delaying the execution of the code by 600ms in this case. Is this something to be expected? I would have thought the message would have been sent async in a separate thread so the main code doesn't get delayed. Also my ping …
我似乎无法使用numpy.digitize来处理datetime64:
date_bins = np.array([np.datetime64(datetime.datetime(2014, n, 1), 's') for n in range(1,13)])
np.digitize(date_bins, date_bins)
Run Code Online (Sandbox Code Playgroud)
它给出以下错误:
TypeError: Cannot cast array data from dtype('<M8[s]') to dtype('float64') according to the rule 'safe'
Run Code Online (Sandbox Code Playgroud)
这是预期的行为吗?
通过HTML5 EventSource对象使用SSE时,请求是否使用HTTP/2多路复用/流水线功能?特别是,不同标签(重新)中的SSE请求是否会使用相同的HTTP/2连接?
我假设,因为SSE基于HTTP/1.1 chunked_encoding技术(AFAIK),但想检查.