小编Mar*_*ark的帖子

如何在Python中在后台运行长时间运行的作业

我有一个运行长期工作的Web服务(大约几个小时).我正在使用Flask,Gunicorn和nginx进行开发.

我想做的是让路径花费很长时间才能完成,调用一个创建线程的函数.然后该函数将guid返回到路由,并且路由将返回用户可用于检查进度的URL(使用guid).我正在使线程成为守护进程(thread.daemon = True),以便在我的调用代码退出(意外)时线程退出.

这是正确的使用方法吗?它有效,但这并不意味着它是正确的.

my_thread = threading.Thread(target=self._run_audit, args=())
my_thread.daemon = True
my_thread.start()
Run Code Online (Sandbox Code Playgroud)

python multithreading nginx flask

17
推荐指数
3
解决办法
1万
查看次数

gunicorn、flask 和 Nginx 的流媒体服务器问题

我正在使用 gunicorn 和烧瓶作为网络服务。我试图让我的头脑围绕运行流路由(不确定这是否是正确的术语)。

我的路线是这样的:

@app.route('/delay')
def delay():
    from time import sleep
    def delay_inner():
        for i in range(10):
            sleep(5)
            yield json.dumps({'delay': i})
    return Response(delay_inner(), mimetype="text/event-stream")
Run Code Online (Sandbox Code Playgroud)

我希望每次 delay_inner 产生输出时服务器都会产生输出。但是,我得到的是一次所有的 json 响应,并且只有当 delay_inner 完成执行时。

我在这里缺少什么?

--编辑--我已经解决了 Flask 和 Gunicorn 的问题,我可以通过使用 Flask 服务器并转到 Gunicorn 端口来按预期运行它。它按预期流式传输数据。但是,我应该在原帖中提到这一点,我也在 nginx 后面运行。并且没有正确设置以进行流式传输。任何人都可以帮忙吗?

python streaming nginx flask gunicorn

6
推荐指数
1
解决办法
1673
查看次数

如何使用 argparse 将输入文件中的值附加到命令行选项?

假设我有一个 yaml 输入文件 (input.txt),其中包含以下内容:

names: [Bob, Jill]
ages: [22, 31]
county: somewhere
Run Code Online (Sandbox Code Playgroud)

我的代码来解析这个:

import yaml
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--name', default=[], dest='names', action='append')
parser.add_argument('--age', default=[], dest='ages', action='append')
parser.add_argument('--county', dest='county')
parser.add_argument(
    '--config-file',
    dest='config_file',
    type=argparse.FileType(mode='r'))
args = parser.parse_args()
print args
Run Code Online (Sandbox Code Playgroud)

我的问题是这样的:我见过许多网站显示如何为配置文件添加参数,如上面所示。如何“解析”该配置文件并将其中的值添加(附加)到命令行上传递的任何值?

如果我的程序名为 so.py,并且像这样调用:

so.py --config-file=input.txt --name 'Ralph' --age 40
Run Code Online (Sandbox Code Playgroud)

我想在我的参数中获得名称= ['鲍勃','吉尔','拉尔夫']年龄= [22,31,40]县='某处'。这可能吗?

python command-line-arguments argparse

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

我可以创建字符串和atomic<int>键值对的unordered_map吗?

我想创建unordered_map一个<string, atomic<int>>. 我将使用它来递增(fetch_add),存储或加载基于字符串(键)的原子值。例如,假设我有 10 个原子整数计数器,但我只想获取 4 或它们的值。我想要一个unordered_map看起来像这样的:

unordered_map<string, atomic<int>> myValues = {
    {"first", atomic<int>(0)},
    {"second", atomic<int>(0)}, ... the last key being "tenth"}
};
Run Code Online (Sandbox Code Playgroud)

然后说我有一个字符串向量,例如

vector<string> wanted = {"first", "third", "tenth"};
Run Code Online (Sandbox Code Playgroud)

我想做以下事情:

for (auto want: wanted) {
    cout <<  myValues[want].load() << endl;
Run Code Online (Sandbox Code Playgroud)

这应该打印出 Wanted 中键的值。

我可以这样做吗?如果我尝试按上述方式创建映射,则会收到错误消息:原子的赋值运算符已删除?有没有办法做到这一点?

c++ unordered-map atomic c++11

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

在 yocto/poky 中使用 SELinux

设置:我正在运行 Ubuntu 16.04,我正在尝试构建一个包含来自 meta-selinux 的一些配方的映像。我试图遵循自述文件和其他帮助,但我很困惑。

这是我拥有的图层:

drwxrwxr-x 19 ubuntu ubuntu 4096 Oct  3 18:31 meta/
drwxrwxr-x 14 ubuntu ubuntu 4096 Oct  3 22:49 meta-openembedded/
drwxrwxr-x  5 ubuntu ubuntu 4096 Oct  3 18:31 meta-poky/
drwxrwxr-x  8 ubuntu ubuntu 4096 Oct  3 18:31 meta-selftest/
drwxrwxr-x 16 ubuntu ubuntu 4096 Oct  3 22:51 meta-selinux/
drwxrwxr-x  7 ubuntu ubuntu 4096 Oct  3 18:31 meta-skeleton/
drwxrwxr-x 15 ubuntu ubuntu 4096 Oct  3 22:19 meta-virtualization/
drwxrwxr-x  9 ubuntu ubuntu 4096 Oct  3 18:31 meta-yocto-bsp/
drwxrwxr-x  7 …
Run Code Online (Sandbox Code Playgroud)

openembedded yocto

4
推荐指数
1
解决办法
3419
查看次数

Python 使用不区分大小写的方式搜索集合

我有 3 套和一个字典。我的套装看起来像这样:

set1 = set(['Bob', 'Jim', 'RALPH'])
set2 = set(['Jill', 'Nadeen', 'WaterBottle'])
set3 = set(['ThisIsOne', 'ThisIsTwo'])
all_names = {'first_one': set1, 
             'second_one': set2, 
             'third_one': set3, 
             'all':set1 | set2 | set3}

#I can make it work if I do this:
r = re.search(input, "','".join(all_names['all'])
if r:
    name = all_names[r.group()]
Run Code Online (Sandbox Code Playgroud)

我的用户将传入前三组中的名称之一,或 all_names 中的键之一。用户传入的名称不区分大小写,但我需要返回相应的名称,因为它们在集合中大写。如果他们传入一个键,我可以毫无问题地获取名称列表,但是如果用户传入'nadeen',我可以在all_names['all'] 中轻松(有效地)找到它吗?

但是,我的老板认为这不是最好的方法。有没有办法对此使用理解?还有其他想法吗?

python search set case-insensitive

3
推荐指数
1
解决办法
5500
查看次数

perl简单的效率和可读性

我对perl的效率和可读性有疑问

我有一个变量可以采用几个值之一(5-6).有时我想检查这是否是一个特定的值,有时我想检查它是否是几个选择之一.我在我的代码中(在不同的函数中)在很多地方做出这样的决定,我想尽可能"紧凑".

例如,说

my $mode; # can be any of qw(one two three four five six)
if ($mode eq 'one') {
    #do code
}

if ($mode eq 'one' or $mode eq 'two' or $mode eq 'three') {
    #do more code
}
Run Code Online (Sandbox Code Playgroud)

这当然不是我真正的代码,并且使用有意义的变量名称,我的if语句变得非常长并且包含在几行上.

任何帮助表示赞赏!

perl performance

3
推荐指数
1
解决办法
212
查看次数

pytest fixture对内省调用函数

我有一个测试类和一个如下所示的设置函数:

@pytest.fixture(autouse=True, scope='function')
def setup(self, request):
    self.client = MyClass()
    first_patcher = patch('myclass.myclass.function_to_patch')
    first_mock = first_patcher.start()
    first_mock.return_value = 'foo'
    value_to_return = getattr(request, 'value_name', None)
    second_patcher = patch('myclass.myclass.function_two')
    second_mock = second_patcher.start()
    second_mock.return_value = value_to_return
    #could clean up my mocks here, but don't care right now
Run Code Online (Sandbox Code Playgroud)

我在pytest的文档中看到,可以对模块级别值进行内省:val = getattr(request.module,'val_name',None)

但是,我希望能够根据我所在的测试指定不同的值来返回.所以我正在寻找一种方法来反省test_function而不是test_module.

http://pytest.org/latest/fixture.html#fixtures-can-introspect-the-requesting-test-context

python introspection fixtures pytest

3
推荐指数
1
解决办法
1926
查看次数

将对数曲线拟合到数据点并在 numpy 中推断

我有一组数据点(代码中的 x 和 y)。我想绘制这些点,并为它们拟合一条曲线,显示使 y = 100.0 所需的 x 值(y 值是百分比)。这是我尝试过的,但我的曲线是 3 次多项式(我知道这是错误的)。对我来说,数据看起来是对数的,但我现在知道如何将对数曲线与我的数据进行多重拟合。

import numpy as np
import matplotlib.pyplot as plt

x = np.array([4,8,15,29,58,116,231,462,924,1848])
y = np.array([1.05,2.11,3.95,7.37,13.88,25.46,43.03,64.28,81.97,87.43])

for x1, y1 in zip(x,y):
    plt.plot(x1, y1, 'ro')

z = np.polyfit(x, y, 3)
f = np.poly1d(z)

for x1 in np.linspace(0, 1848, 110):
    plt.plot(x1, f(x1), 'b+')

plt.show()
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止得到的

python numpy matplotlib curve-fitting

3
推荐指数
1
解决办法
6778
查看次数

使用FixedThreadPool和队列的Java设计

我正在设计一个程序,需要从数据存储区获取结果并将这些结果发布到另一个系统.我正在获取的数据由UUID引用,并且其他文档由UUID链接到它.我将发布大量文档(> 100K文档),所以我想同时这样做.我正在考虑以下设计:

从数据存储区获取文档列表.每份文件都有:

docId (UUID)
docData (json doc)
type1 (UUID)
type1Data (json)
type2 (UUUID)
type2Data (json)
list<UUID> type3Ids
list of type3 data (json)
Run Code Online (Sandbox Code Playgroud)

我从第一次调用中获得的唯一数据是docIds.我正在考虑将这些文档推送到队列中,并让一组工作者(取出者)将相关的调用返回到数据存储区以检索数据.

retrieve the docData from datastore, fill in the type1, type2 and type3 UUIDS
do a batch get to retrieve all the type1, typ2 and type3 docs
Push the results into another queue for posting to other system
Run Code Online (Sandbox Code Playgroud)

第二组工作人员(海报)将从每个文档的第二个队列中读取并将结果发布到第二个系统.

我有一个问题,我应该创建1个FixedThreadPool(大小为X)还是两个FixedThreadPool(大小为X/2)?如果第一个队列中有很多作业,第二个队列在第一个队列为空之前就不会启动,是否存在饥饿的危险?

获取者将使网络coalls与数据库进行通信,他们似乎比CPU绑定更多的IO绑定.海报也会进行网络呼叫,但它们在我的代码运行的同一个VPC中的云中,因此它们将非常接近.

java multithreading concurrent.futures

3
推荐指数
1
解决办法
53
查看次数