小编Pet*_*pov的帖子

Python多处理和处理工作程序中的异常

我使用python多处理库作为算法,其中我有许多工作人员处理某些数据并将结果返回给父进程.我使用multiprocessing.Queue将作业传递给工作者,然后使用multiprocessing.Queue来收集结果.

这一切都很好,直到工人无法处理一些数据.在下面的简化示例中,每个工作人员有两个阶段:

  • 初始化 - 可能失败,在这种情况下应该销毁工人
  • 数据处理 - 处理一大块数据可能会失败,在这种情况下,工作人员应跳过此块并继续下一个数据.

当这两个阶段中的任何一个失败时,脚本完成后会出现死锁.这段代码模拟了我的问题:

import multiprocessing as mp
import random

workers_count = 5
# Probability of failure, change to simulate failures
fail_init_p = 0.2
fail_job_p = 0.3


#========= Worker =========
def do_work(job_state, arg):
    if random.random() < fail_job_p:
        raise Exception("Job failed")
    return "job %d processed %d" % (job_state, arg)

def init(args):
    if random.random() < fail_init_p:
        raise Exception("Worker init failed")
    return args

def worker_function(args, jobs_queue, result_queue):
    # INIT
    # What to do when init() fails?
    try:
        state …
Run Code Online (Sandbox Code Playgroud)

python parallel-processing error-handling exception multiprocessing

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

Haskell将[IO String]加入IO String的方法

我的目标是编写Haskell函数,它从输入中读取N行并将它们连接成一个字符串.以下是第一次尝试:

readNLines :: Int -> IO String
readNLines n = do
  let rows = replicate n getLine
  let rowsAsString = foldl ++ [] rows 
  return rowsAsString  
Run Code Online (Sandbox Code Playgroud)

这里有一些投诉foldl:

无法匹配预期类型[a]' against inferred type(a1 - > b - > a1) - > a1 - > [b] - > a1'

据我所知,行的类型是[IO String],有可能一些如何加入这样的列表IO String

io monads haskell

4
推荐指数
3
解决办法
3066
查看次数

使用boost :: python时,将python.io对象转换为std :: istream

在编写我的第一个django应用程序时,我遇到了boost :: python的以下问题.从python代码,我需要将io.BytesIO传递给带有std :: istream的C++类.

我有一个遗留的C++库,用于读取某种格式的文件.我们打电话是somelib.该库的接口使用std :: istream作为输入.像这样的东西:

class SomeReader
{
public:
    bool read_from_stream(std::istream&);
};
Run Code Online (Sandbox Code Playgroud)

我想包装它,以便我可以通过以下方式使用python中的lib:

reader = somelib.SomeReader()
print ">>Pyhton: reading from BytesIO"
buf = io.BytesIO("Hello Stack Overflow")
reader.read(buf)
Run Code Online (Sandbox Code Playgroud)

我发现了如何为实际的python文件对象做到这一点.但目前尚不清楚如何为任意文件类对象做这件事.这是我到目前为止的python绑定的定义:

using namespace boost::python;
namespace io = boost::iostreams;

struct SomeReaderWrap: SomeReader, wrapper<SomeReader>
{
    bool read(object &py_file)
    {
        if (PyFile_Check(py_file.ptr()))
        {
            FILE* handle = PyFile_AsFile(py_file.ptr());
            io::stream_buffer<io::file_descriptor_source> fpstream (fileno(handle), io::never_close_handle);
            std::istream in(&fpstream);
            return this->read_from_stream(in);
        }
        else
        {
            //
            // …
Run Code Online (Sandbox Code Playgroud)

c++ python io boost-python

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