这应该非常简单,我很惊讶我无法在stackoverflow上找到这个问题.
我有一个类似程序的守护进程需要响应SIGTERM和SIGINT信号才能与upstart一起使用.我读到,最好的方法是在主线程的一个单独的线程中运行程序的主循环,让主线程处理信号.然后,当接收到信号时,信号处理程序应通过设置在主循环中例行检查的sentinel标志来告诉主循环退出.
我已经尝试过这样做,但它没有像我预期的那样工作.请参阅以下代码:
from threading import Thread
import signal
import time
import sys
stop_requested = False
def sig_handler(signum, frame):
sys.stdout.write("handling signal: %s\n" % signum)
sys.stdout.flush()
global stop_requested
stop_requested = True
def run():
sys.stdout.write("run started\n")
sys.stdout.flush()
while not stop_requested:
time.sleep(2)
sys.stdout.write("run exited\n")
sys.stdout.flush()
signal.signal(signal.SIGTERM, sig_handler)
signal.signal(signal.SIGINT, sig_handler)
t = Thread(target=run)
t.start()
t.join()
sys.stdout.write("join completed\n")
sys.stdout.flush()
Run Code Online (Sandbox Code Playgroud)
我用以下两种方式对此进行了测试:
1)
$ python main.py > output.txt&
[2] 3204
$ kill -15 3204
Run Code Online (Sandbox Code Playgroud)
2)
$ python main.py
ctrl+c
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,我都希望将其写入输出:
run started
handling signal: 15
run exited …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用peewee python ORM实现多对多场景,我想要一些单元测试.Peewee教程很棒,但它假设数据库是在模块级定义的,然后所有模型都在使用它.我的情况不同:我没有源代码文件(来自python的观点的模块)和我明确运行的测试,我使用nose从该文件收集测试并运行它们.
如何仅将自定义数据库用于测试中实例化的模型(由鼻子运行)?我的目标是仅使用内存数据库进行测试,以加快测试过程.
这是一些JSON示例:
{
"Tags": [
{
"Key": "Name",
"Value": "foo"
},
{
"Key": "Type",
"Value": "C"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我想仅在"Key"为"Type"时才打印"Value"的值.所以它应该打印出"C".这就是我到目前为止所拥有的.
echo $MY_TAGS | jq 'if .Tags[].Key == "Type" then .Tags[].Value else empty end'
Run Code Online (Sandbox Code Playgroud)
但它打印出来:
"foo"
"C"
有没有办法做到这一点?
我计划使用 SQLite 和 Peewee (ORM) 来实现轻型内部 Web 服务(每秒<20 个请求)。Web 服务可以处理多个线程上的多个并发请求。在每次请求期间,数据库都会被读取和写入。这意味着我需要具备并发读取和写入的能力。如果数据在读取和写入之间发生变化,对于该应用程序来说并不重要。
SQLite FAQ说允许并发读取,但来自多个线程的并发写入需要获取文件锁。我的问题是:Peewee 是否会为我处理这种锁定,或者我需要在代码中做些什么才能实现这一点?
Peewee 数据库对象在线程之间共享。我认为这意味着数据库连接也是共享的。
我找不到 Peewee 对此的具体答案,所以我在这里问。
我正在使用org.apache.tika.Tika.parseToString()将文档转换为纯文本(即无格式文本)文件。我的应用程序可能需要转换不使用 Unicode 字符集的文档。例如,某些文档可能以Chinese GB2312字符集编码。如果 Tika 将输出重新编码为UTF-8. 这将需要 Tika 引用许多不同字符集和 Unicode 之间的映射,以便转换字符。
Tika 是否将非 Unicode 字符集文本转换为 Unicode 作为 的输出parseToString()?那里有很多字符集,所以如果蒂卡为多个字符集这样做,我会印象深刻。
更新:我能够使用一些非拉丁字符集(GB2312(中文)和 KOI8-R(俄语))创建几个不同的文件。Tika.parseToString()甚至无法检测到字符集或编码。我在 Tika 错误跟踪器上打开了一个问题:https : //issues.apache.org/jira/browse/TIKA-1262