标签: pool

如何为actor指定一个线程池

我有一个使用全局线程池的现有java/scala应用程序.我想开始在项目中使用actor,但希望应用程序中的所有内容都使用相同的池.

我知道我可以设置actor使用但希望共享线程池的最大线程数.这是否必要/合理,是否可以指定actor的线程池?

如果不可能/推荐,在已经使用线程的应用程序中集成actor时是否有任何经验法则?

谢谢.

multithreading scala pool actor

12
推荐指数
2
解决办法
4675
查看次数

Windows 8.1上的Python多处理池只产生一个工作线程

我目前有这段代码(随意评论:))

def threaded_convert_to_png(self):
    paths = self.get_pages()
    pool = Pool()
    result = pool.map(convert_to_png, paths)
    self.image_path = result
Run Code Online (Sandbox Code Playgroud)

在Intel i7上,它在Linux上运行时会产生8个工作线程; 但是,在运行Windows 8.1 Pro时,它只会生成一个工作程序.我检查并cpu_count()在Linux和Windows上返回8.

  • 我在这里缺少什么,或做错了什么?
  • 有办法解决这个问题吗?

PS这是在Python 2.7.6中

python pool multiprocessing

12
推荐指数
1
解决办法
670
查看次数

在GenericObjectPool中创建对象

我正在GenericObjectPool通过放入Cipher池进行研究,以便可以重复使用.

GenericObjectPool<Cipher> pool;

CipherFactory factory = new CipherFactory(); 
this.pool = new GenericObjectPool<Cipher>(factory);
pool.setMaxTotal(10);
pool.setBlockWhenExhausted(true);
pool.setMaxWaitMillis(30 * 1000);
Run Code Online (Sandbox Code Playgroud)

CipherFactory

public class CipherFactory extends BasePooledObjectFactory<Cipher> {

    private boolean running = false;

    @Override
    public Cipher create() throws Exception {
        return Cipher.getInstance("DESede/CBC/NoPadding");
    }

    @Override
    public PooledObject<Cipher> wrap(Cipher arg0) {
        return new DefaultPooledObject<Cipher>(arg0);
    }

    @Override
    public boolean validateObject(PooledObject<Cipher> p) {
        //Ensures that the instance is safe to be returned by the pool
        return true;
    }

    @Override
    public void destroyObject(PooledObject<Cipher> p) { …
Run Code Online (Sandbox Code Playgroud)

java generics pool object apache-commons

12
推荐指数
1
解决办法
5000
查看次数

使用Puma的工人,线程和池大小

如果我有一个1核心的服务器,有多少puma worker,thread和什么数据库池大小合适?

一般大拇指在这里是什么?

ruby pool worker puma

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

要汇集还是不汇集java加密服务提供商

  • MessageDigest =>根据需要经常创建新实例
  • KeyFactory =>使用单个共享实例
  • SecureRandom =>使用StackObjectPool
  • Cipher =>使用StackObjectPool

在编写安全框架时,我面临着一个常见的困境:"汇集或不汇集"

基本上这个问题分为两个"群体":

  1. 第1组:SecureRandom因为调用nextBytes(...)是同步的,它可能成为WebApp /多线程应用程序的瓶颈

  2. 第2组:加密服务提供商,如MessageDigest,Signature,Cipher,KeyFactory,...(因为的成本getInstance()?)

你有什么意见 ?

你在这些问题上的习惯是什么?

编辑09/07/2013

我终于花时间自己测试了@Qwerky Share课程,我觉得结果很......令人惊讶.

这个类缺乏我的主要关注:像GenericObjectPoolStackObjectPool这样的池.

所以我重新修改了这个类以测试所有4种选择:

  • 具有同步gist的单个共享实例
  • 每个环内的新实例(我不感兴趣的情况下,当你可以拉外循环摘要创建)要点
  • GenericObjectPool:要点
  • StackObjectPool:要点

我不得不将循环次数降低到100000,因为1M花了太多时间在游泳池上.

我还在Thread.yield()每个循环的末尾添加了一个,以使负载具有更好的形状.

结果(累积运行时):

  • 信息摘要
    • 新实例:420秒
    • 单个实例:550秒
    • StackObjectPool:800秒
    • GenericObjectPool:1900年代
  • 的KeyFactory
    • 新实例:400s
    • 单个实例:350秒
    • StackObjectPool:2900秒
    • GenericObjectPool:3500秒
  • 的SecureRandom
    • StackObjectPool:1600秒
    • 新实例:2300秒
    • GenericObjectPool:2300s
    • 单个实例:2800秒
  • 暗号
    • StackObjectPool:2800秒
    • GenericObjectPool:3500秒
    • 单个实例:5100秒
    • 新实例:8000秒 …

java pool

10
推荐指数
1
解决办法
1952
查看次数

python多处理池终止

我正在使用renderfarm,我需要我的客户端能够启动渲染器的多个实例,而不会阻塞,因此客户端可以接收新的命令.我已经正常工作,但是我无法终止创建的进程.

在全局级别,我定义了我的池(以便我可以从任何函数访问它):

p = Pool(2)
Run Code Online (Sandbox Code Playgroud)

然后我用apply_async调用我的渲染器:

for i in range(totalInstances):
    p.apply_async(render, (allRenderArgs[i],args[2]), callback=renderFinished)
p.close()
Run Code Online (Sandbox Code Playgroud)

该函数完成,在后台启动进程,并等待新命令.我做了一个简单的命令,将杀死客户端并停止渲染:

def close():
'close this client instance'
tn.write ("say "+USER+" is leaving the farm\r\n")
try:
    p.terminate()
except Exception,e:
    print str(e)
    sys.exit()
sys.exit()
Run Code Online (Sandbox Code Playgroud)

它似乎没有给出错误(它会打印错误),python终止但后台进程仍在运行.任何人都可以推荐更好的方法来控制这些推出的程序吗

python pool multiprocessing

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

如何处理Python多处理数据库并发,特别是与django?

所以,我正在尝试编写一个使用django作为其ORM的应用程序,因为它需要做一些幕后处理和易于使用的前端.它的核心功能是处理数据库中的数据,在高CPU过程中(基本上是monte carlo模拟),我想实现多处理,特别是使用Pool(我得到4个进程).基本上我的代码就是这样运行的,父代大约有20个孩子:

assorted import statements to get the django environment in the script
from multiprocessing import Pool
from random import random
from time import sleep

def test(child):
    x=[]
    print child.id
    for i in range(100):
        print child.id, i
        x.append(child.parent.id) #just to hit the DB
    return x

if __name__ == '__main__':
    parent = Parent.objects.get(id=1)
    pool = Pool()
    results = []
    results = pool.map(test,parent.children.all())
    pool.close()
    pool.join()
    print results
Run Code Online (Sandbox Code Playgroud)

使用这样的代码,我得到间歇性的DatabaseErrors或PicklingErrors.前者通常是"格式错误的数据库"或"与MySQL服务器失去连接"的形式,后者通常是"不能泡菜型号.DoesNotExist".它们是随机的,随任何进程发生,当然DB本身没有任何问题.如果我设置pool = Pool(proccesses=1)它然后运行,在一个线程就好了.我还会抛出各种打印语句,以确保它们中的大多数实际上都在运行.

我也一直在test改为:

def test(child):
    x=[] …
Run Code Online (Sandbox Code Playgroud)

python sql django pool multiprocessing

10
推荐指数
1
解决办法
5612
查看次数

有一个sql PreparedStatement池是否有意义?

作为一个PreparedStatatement包含预编译的sql命令,所以当我们创建这种类型的池时,为了不创建和销毁这个对象太多(就像线程池一样).
它有意义吗?或者我只是如此困惑?

java sql postgresql design-patterns pool

10
推荐指数
1
解决办法
565
查看次数

Python多处理 - 跟踪pool.map操作的过程

我有一个函数执行一些模拟并返回一个字符串格式的数组.

我想运行模拟(函数)来改变输入参数值,超过10000个可能的输入值,并将结果写入单个文件.

我正在使用多处理,特别是pool.map函数来并行运行模拟.

由于运行模拟功能超过10000次的整个过程需要很长时间,我真的想跟踪整个操作的过程.

我认为下面我当前代码中的问题是,pool.map运行该函数10000次,在这些操作期间没有任何进程跟踪.一旦并行处理完成10000次模拟(可能是几小时到几天),那么我会在10000个模拟结果被保存到文件时继续跟踪.所以这并不是真正跟踪pool.map操作的处理.

是否可以轻松修复我的代码,以便进行流程跟踪?

def simFunction(input):
    # Does some simulation and outputs simResult
    return str(simResult)

# Parallel processing

inputs = np.arange(0,10000,1)

if __name__ == "__main__":
    numCores = multiprocessing.cpu_count()
    pool = multiprocessing.Pool(processes = numCores)
    t = pool.map(simFunction, inputs) 
    with open('results.txt','w') as out:
        print("Starting to simulate " + str(len(inputs)) + " input values...")
        counter = 0
        for i in t:
            out.write(i + '\n')
            counter = counter + 1
            if counter%100==0:
                print(str(counter) + " of " + str(len(inputs)) + " input …
Run Code Online (Sandbox Code Playgroud)

python pool multiprocessing

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

在生产中使用公共池的提示

基于我在这里得到的答案,我开始认真对待公共泳池.我最近使用它的经历是在2003年左右,可能是版本1.1或1.2.它的主要用户DBCP被许多人认为是有缺陷的并且要避免.

有没有人在生产中使用公共池来编写自己的池?什么是最好的泳池类型?我打算在其中存储客户端 TCP套接字.

是否有另一个通用池替换它?

java sockets pool

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