我希望在编写时读取几个日志文件并使用asyncio处理它们的输入.代码必须在Windows上运行.根据我从stackoverflow和web搜索的理解,异步文件I/O在大多数操作系统上都很棘手(select例如,不会按预期工作).虽然我确信我可以用其他方法(例如线程)做到这一点,但我会尝试使用asyncio来查看它是什么样的.最有用的答案可能是描述这个问题的解决方案的"架构"应该是什么样的,即应该如何调用或调度不同的函数和协程.
下面给我一个生成器,逐行读取文件(通过轮询,这是可以接受的):
import time
def line_reader(f):
while True:
line = f.readline()
if not line:
time.sleep(POLL_INTERVAL)
continue
process_line(line)
Run Code Online (Sandbox Code Playgroud)
有几个要监视和处理的文件,这种代码需要线程.我稍微修改了它以便更适用于asyncio:
import asyncio
def line_reader(f):
while True:
line = f.readline()
if not line:
yield from asyncio.sleep(POLL_INTERVAL)
continue
process_line(line)
Run Code Online (Sandbox Code Playgroud)
当我通过asyncio事件循环安排它时,这种方法有效,但如果是process_data块,那么这当然不好.在开始时,我想象解决方案看起来像
def process_data():
...
while True:
...
line = yield from line_reader()
...
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚如何使这项工作(至少没有process_data管理相当多的状态).
关于如何构建这种代码的任何想法?
我正在尝试设置gitlab,以便可以通过现有的apache服务器的子目录访问它example.com/gitlab,例如.我试图使用乘客,因为这似乎是最容易设置的,但其他解决方案也是可以接受的.遗憾的是,为gitlab使用单独的虚拟主机不是我的选择.
在设置时,我遵循了gitlab设置指南和乘客文档.
我相信最相关的部分/etc/httpd/conf/httpd.conf如下:
DocumentRoot "/home/.www"
# gitlab config
RackBaseURI /gitlab
<Directory "/home/.www/gitlab">
Options -MultiViews
</Directory>
Run Code Online (Sandbox Code Playgroud)
该DocumentRoot阿帕奇包含一个符号链接到gitlab公共目录:
$ ls -l /home/.www
lrwxrwxrwx 1 root http 23 Jul 29 12:35 gitlab -> ../gitlab/gitlab/public
Run Code Online (Sandbox Code Playgroud)
使用passenger-install-apache2-module脚本安装了Passenger,脚本输出的配置行包含在apache配置中.
我打同relative_url_root在config/gitlab.yml; 这没有任何影响(根据文件中的注释判断,这种机制似乎是不鼓励或弃用的 - 避免它会很好).
访问时example.com/gitlab,我得到以下输出(纯文本文档):
Not Found: /
Run Code Online (Sandbox Code Playgroud)
Apache的日志表明乘客已经启动,但至少favicon.ico是从文档根目录请求,当应该从子目录请求时/gitlab/favicon.ico:
[ 2013-07-29 14:14:12.1029 2037/7f3502e1e740 agents/HelperAgent/Main.cpp:597 ]: PassengerHelperAgent online, listening at unix:/tmp/passenger.1.0.2033/generation-0/request
[ 2013-07-29 14:14:12.1150 2043/7fa24dbf3740 …Run Code Online (Sandbox Code Playgroud) 我以前在ipython笔记本中使用过漂亮的数学印刷.在升级到jupyter(也升级了许多其他与ipython相关的软件包)之后,漂亮的打印不再像以前一样工作了.我在笔记本的顶部使用此代码进行设置:
import sympy as sp
sp.init_printing()
Run Code Online (Sandbox Code Playgroud)
我也尝试了这个use_latex=True和use_latex='mathjax'参数init_printing,但这没有帮助.在所有情况下,表达式在升级后以纯文本格式打印.有关笔记本形式的完整示例,请参阅https://gist.github.com/josteinbf/78dae5085dec0aa19a48#file-sympy_pp-ipynb.
笔记本中和运行jupyter的控制台中都没有错误消息或警告.如何修复(或至少调试)此问题?
我在sympy中做了一些计算,结果最后是一组常量.其中一个直接插入下面的代码段:
from sympy import *
expr = (18**(Rational(1, 3))/(6*(3 + sqrt(3)*I)**(Rational(1, 3)))
+ 12**(Rational(1, 3))*(3 + sqrt(3)*I)**(Rational(1, 3))/12)
print(expr.evalf())
print(expr.simplify())
Run Code Online (Sandbox Code Playgroud)
这回来了
0.56857902130163 + 0.e-22*I
18**(1/3)/(6*(3 + sqrt(3)*I)**(1/3)) + (36 + 12*sqrt(3)*I)**(1/3)/12
Run Code Online (Sandbox Code Playgroud)
所以表达似乎是一个实数,但同情不能进一步简化它.用笔和纸,我简化了这个
cos(pi/18) / sqrt(3)
Run Code Online (Sandbox Code Playgroud)
它与返回的数值一致evalf().
我已经尝试了许多不同的简化函数,但似乎没有人能够进一步减少表达式.使用类似的替换
expr.subs(3 + sqrt(3)*I, sqrt(12) * exp(I*pi/6))
Run Code Online (Sandbox Code Playgroud)
改善表达,但仍然没有得到结论,它是真实的.使用欧拉的替代公式,
expr.subs(3 + sqrt(3)*I, sqrt(12) * (cos(pi/6) + I*sin(pi/6)))
Run Code Online (Sandbox Code Playgroud)
sympy最终能够得出结论表达式是真实的,但表达本身在打印时会大小爆炸(即使我simplify在替换后尝试).
有没有更好的方法来减少这种情况?我有许多类似的复杂常量表达式,我想知道它们是真实的(或不是).
我是Haskell的新手,我一直在尝试使用Parsec作为练习来编写JSON解析器.这大部分进展顺利,我能够用相对较少的代码解析列表和对象,这些代码也是可读的(太棒了!).但是,对于JSON,我还需要解析像这样的原语
我希望找到准备使用解析器作为Parsec的一部分.我得到的最接近的是Parsec.Tokens模块(定义integer和朋友),但是这些解析器需要一个"语言定义",这似乎超出了解析像JSON这样简单的东西 - 它似乎是为编程语言.
所以我的问题是:
Parsec.Token中的函数是正确的方法吗?如果是这样,如何制作合适的语言定义?
整数等"原始"解析器是否定义在其他地方?也许在另一个包裹?
我自己应该写这些低级解析器吗?我可以看到自己经常重复使用它们......(模糊的科学数据格式等)
我注意到这个网站上的一个问题说Megaparsec包含了这些原语[1],但我想这些不能和parsec一起使用.
相关问题:
我发现有关Azure CLI(az命令)的bash [1]可用命令完成的提示,但是我没有找到有关如何为zsh安装/启用该命令的任何指示。如果可能的话,有人知道该怎么做吗?如果相关,我使用oh-my-zsh。
我正在尝试计算相对于具有keras的神经网络(作为诊断工具)的权重的梯度范数。最终,我想为此创建一个回调,但是在此过程中,我一直在努力创建一个可以计算梯度并以numpy数组/标量值形式(而不只是tensorflow)形式返回实际值的函数。张量)。代码如下:
import numpy as np
import keras.backend as K
from keras.layers import Dense
from keras.models import Sequential
def get_gradient_norm_func(model):
grads = K.gradients(model.total_loss, model.trainable_weights)
summed_squares = [K.sum(K.square(g)) for g in grads]
norm = K.sqrt(sum(summed_squares))
func = K.function([model.input], [norm])
return func
def main():
x = np.random.random((128,)).reshape((-1, 1))
y = 2 * x
model = Sequential(layers=[Dense(2, input_shape=(1,)),
Dense(1)])
model.compile(loss='mse', optimizer='RMSprop')
get_gradient = get_gradient_norm_func(model)
history = model.fit(x, y, epochs=1)
print(get_gradient([x]))
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
调用时代码失败get_gradient()。追溯很长,涉及很多形状,但是关于什么是正确形状的信息很少。我该如何纠正?
理想情况下,我想要一个与后端无关的解决方案,但是基于tensorflow的解决方案也是一种选择。
2017-08-15 15:39:14.914388: W tensorflow/core/framework/op_kernel.cc:1148] Invalid …Run Code Online (Sandbox Code Playgroud)