PHP中的多线程/多任务
在php中,我们通常在不考虑服务器能够使用的内容的情况下进行编码.现在几天甚至PC都有多个内核,并且处理64位数据.据我所知,PHP引擎本身已被优化以利用多个内核.我们如何能够进一步优化代码以利用多个内核. 换句话说,我想知道会教会我编写代码的技术,而PHP引擎更有可能考虑处理代码. 我不是要求任何用户定义/开源排队方法,而是要以一种利用多核心并更快地工作的方式编写相同的代码. 请建议您的想法并分享您的经验,如果您已经在做这样的事情. 我希望我们应该有进一步优化代码的方法. 解决方案 PHP已有很长时间的线程模型,自PHP4的第一个版本,2000年5月22日. . 线程在前端 在Web应用程序的前端创建用户线程没有任何意义.扩展非常困难. Apache Worker MPM二进制和MOD_PHP使用的每个客户端模型的线程并不是您真正想使用的网站来服务您的网站,当然,如果您使用它,则不想在直接响应任何Web请求时创建其他线程. 为什么线程
0 2023-05-30
编程技术问答社区
Windows上的Perl多处理
我编写了应该打开几个过程的代码,问题在于它在Linux上的工作良好,但是当我在Windows上执行它时,它只会创建一个进程!这可以在Windows上使用Perl创建多进程吗? $j = ARGV[0]; for($i=1; $i
0 2023-05-25
编程技术问答社区
perl Windows替代方案的"系统"(打开多个进程)
这么长的故事,我正在尝试在Windows中运行一个Linux Perl脚本(几乎没有修改). 在Unix上它可以正常工作,但是在Windows我得出的结论是,呼吁系统与Unix上的工作不一样,因此不会创建多个过程. 以下是代码: use strict; use warnings; open (FIN, 'words.txt'); while () { chomp; my $line = $_; system( "perl script.pl $line &" ); } close (FIN); 基本上,我在" words.txt"中有5个不同的单词,我希望每一个都在呼叫script.pl时一一使用,这意味着: word1 script.pl word2 script.pl word3 script.pl etc 到目前为止,它仅在words.txt中打开第一个单词,它仅用一个单词循环.正如我所说的,在Unix上它可以很好
0 2023-05-24
编程技术问答社区
尽管有收获,但父母并不等待孩子的进程结束
我完全意识到,有大量文章解释了亲子过程动态的内部工作.我经历了它们,使我的东西正常运行,几乎可以运行.但是有一件事让我烦恼,尽管有多次尝试,我还是无法理解. 问题:尽管收获了孩子,但Main并没有等待所有孩子过早地退出.我相信我确实从子过程中出发了适当的退出,并且我已经在子过程中安装了收割机 - 那么在孩子结束之前,主要退出? ? 不在这里寻找解决方案 - 但是我需要一个新的方向,下一周我可以敲打头.到目前为止 - 我觉得我已经筋疲力尽了,尝试了很多事情,但无济于事. 关于我要实现的目标的一些背景: 总的来说 - 我希望所有的孩子都能完成,只有这样,我才想继续做一些事情.每个子过程都会产生一堆线程,这些线程与上述子过程正确连接,然后将其出口使用exit(0). . 您在程序中可能会观察到的其他hoopla不过是我们要击中5个API(发动机)的要求,但只有固定批次大小,例如一次,每次为10.我为每个引擎启动子进程,并为每个请求启动线程 - 然后我等待所有线程完
0 2023-05-24
编程技术问答社区
perl子进程信令父进程
我已经编写了以下代码,以测试孩子和父母之间的信号.理想情况下,当孩子向父母提供SIGINT时,父母应该回到新的迭代中并等待用户输入.我在Perl 5.8中观察到了这一点,但是在Perl 5.6.1(我被要求使用)中,父母实际上是"杀死的".没有下一个迭代. my $parent_pid = $$; $pid = fork(); if($pid == 0) { print "child started\n"; kill 2, $parent_pid; } else { while(1) { eval { $SIG{INT} = sub{die "GOTCHA";}; print 'inside parent'."\n"; $a = ; }; if($@) { p
2 2023-05-24
编程技术问答社区
是否有Perl的多处理模块?
Perl是否有多处理模块?具有类似功能的功能与Python的多处理模块. 我知道我可以使用Perl构建类似的功能,但是我正在寻找已经实施的东西. 解决方案 我认为 Forks::Super 非常接近.它具有在背景过程中运行任意子例程(或外部命令)的一些功能,监视和发出信号的背景过程,并使分解沟通减轻一点痛苦. use Forks::Super; sub do_something { my @args = @_; ... } $process = fork { sub => \&do_something, args => [@args] }; $process->wait; my $x = 42; my @y = (); my %z = (); sub do_something_else { $x = 19; @y = qw(foo bar); %z = (foo => 'bar'); } $process = fork { sub =>
2 2023-05-24
编程技术问答社区
perl进程队列
我有一个perl脚本,该脚本分叉了许多子过程.我想拥有某种功能,例如xargs --max-procs=4 --max-args=1或make -j 4,其中Perl将保持给定数量的流程运行,直到它用尽了工作为止. 很容易说出四个过程,然后等待它们都完成,然后再叉四个过程,但是我想同时保留四个或n个过程. Perl中有一种简单的方法可以实现此类过程池? 解决方案 Forks::Super 可以处理此要求. use Forks::Super MAX_PROC => 5, ON_BUSY => [ block | queue ]; 呼叫fork()可以阻止直到活动子过程的数量低于5,或者您可以将其他参数传递给fork呼叫,并且要执行的任务可以排队: fork { sub => sub { ... task to run in subprocess ... } } 当一个子过程结束时,队列上的另一项工作将启动. (我是此模块的作者). 其他解
2 2023-05-24
编程技术问答社区
如何在perl脚本中催生其他程序并立即继续Perl处理?
如何在Perl脚本中产生其他程序并立即继续Perl处理(而不是停止直到产卵程序终止)? 是否可以在运行时从产卵程序中处理输出而不是等待结束? 解决方案 您可以使用open(用两个命令行参数运行程序/bin/some/program): open my $fh, "-|", "/bin/some/program", "cmdline_argument_1", "cmdline_argument_2"; while (my $line = readline($fh)) { print "Program said: $line"; } 从$fh阅读将为您提供您正在运行的程序的stdout. 另一种方式也有效: open my $fh, "|-", "/bin/some/program"; say $fh "Hello!"; 这将您在FileHandle上写入的所有内容都输送到产卵过程的stdin. 如果您想向同一过程中读取和写入和写入,请查看 I
0 2023-05-24
编程技术问答社区
如何从一个子进程中传递一个变量(通过Parallel::ForkManager分叉)?
我的查询: 在以下代码中,我试图将print $commandoutput[0]移动或传递到即将到来的子例程中.我尝试了转变以通过它.但是我对此失败了.您能以正确的方式帮助我关注? 代码: my $max_forks = 4; #createThreads(); my %commandData; my @arr = ( 'bhappy', 'bload -m all -l -res CPUSTEAL', 'bqueues', 'bjobs -u all -l -hfreq 101' ); #print @arr; my $fork = new Parallel::ForkManager($max_forks); $fork->run_on_start( sub { my $pid = shift; } ); $fork->run_on_finish( sub { my ( $pid, $exit, $ident
0 2023-05-24
编程技术问答社区
为什么multiprocessing.Pool.map比内置map慢?
import multiprocessing import time from subprocess import call,STDOUT from glob import glob import sys def do_calculation(data): x = time.time() with open(data + '.classes.report','w') as f: call(["external script", data], stdout = f.fileno(), stderr=STDOUT) return 'apk: {data!s} time {tim!s}'.format(data = data ,tim = time.time()-x) def start_process(): print 'Starting', multiprocessing.current_process().name if __na
2 2023-05-24
编程技术问答社区
儿童多进程中的队列或锁
我已经在这个网站上了一段时间,并且发现了我在构建第一个Python程序时遇到的问题的有用解决方案.我希望你们能再次帮助我. 我正在尝试启动可变数量的多处理,每一个都需要扫描一小部分列表.我一直在修补队列,但是当我实施它们时,它们总是在我的循环中增加大量时间.我希望在保护我的titles.txt免受错误内容的同时最大化我的速度.让我向您展示我的代码. l= ['url1', 'url2', etc] def output(t): f = open('Titles.txt','a') f.write(t) f.close() def job(y,processload): calender = ['Jan', 'Feb', 'Mar', 'Dec'] #the things i want to find for i in range(processload): #looping processload
2 2023-05-24
编程技术问答社区
Python的多进程pool.map不支持并行工作
我写了一个简单的并行python程序 import multiprocessing as mp import time def test_function(i): print("function starts" + str(i)) time.sleep(1) print("function ends" + str(i)) if __name__ == '__main__': pool = mp.Pool(mp.cpu_count()) pool.map(test_function, [i for i in range(4)]) pool.close() pool.join() 我希望在输出中看到的内容: function starts0 function starts2 function starts1 function starts3 function ends1 function ends3 function
0 2023-05-24
编程技术问答社区
为什么池比普通地图慢?
我正在尝试以下代码: import multiprocessing import time import random def square(x): return x**2 pool = multiprocessing.Pool(4) l = [random.random() for i in xrange(10**8)] now = time.time() pool.map(square, l) print time.time() - now now = time.time() map(square, l) print time.time() - now 和pool.map版本始终比常规map版本(19秒与14秒)更慢几秒钟. 我已经查看了问题:为什么要多处理. pool()比仅使用普通功能慢 而且他们似乎将其归为IPC开销或磁盘饱和度,但我觉得这些示例显然不是问题.我没有写/从磁盘上读取/读取任何内容,并且计算足够长,以至于与多处理所节省的总时间相比
0 2023-05-24
编程技术问答社区
在AWS EC2计算机中使用多处理时无法改进
我的算法正在计算平均1000,000多个单独的过程,因此使用python multiprocessing库的Pool(一旦我尝试了MAP,一次使用imap) 当我拥有28台计算机时,它可以使用〜350迭代/分钟 进行 当我搬到AWS EC2时,该AWS EC2带有192个CPU内核,它仅提高了2倍! 〜700迭代/分钟. 我想知道我是否缺少任何好练习...? 我尝试了: 监视CPU的使用 - 所有这些都似乎都使用了 内存监视器 - 仅使用EC2具有的15GB为750GB RAM 使用map而不是改进 似乎最佳点给出了Pool参数为53个核心192(给出〜950 ITER/min) 代码看起来像: import os NUM_THREADS = "1" os.environ["OMP_NUM_THREADS"] = NUM_THREADS os.environ["OPENBLAS_NUM_THREADS"] = NUM_THREADS os.e
2 2023-05-24
编程技术问答社区
在一个有大量输入的for循环上实现Pool
我一直在尝试改进我的代码(使用numba和多处理),但是我无法完全理解它,因为我的功能有很多参数. 我已经用其他功能对其进行了简化(见下文)... 由于每个代理(一个类实例)在这些动作中彼此独立,因此我想用Pool替换for. 所以我会得到一个大功能pooling()我会打电话给代理列表 from multiprocessing import Pool p = Pool(4) p.map(pooling, list(agents)) 但是,我在哪里添加池函数需要的所有论点? 是: def check_demographics(month, my_agents, families, firms, year, mortality_men, mortality_women, fertility, state_id): dummy = list(my_agents) d = str(state_id.iloc[0]) # Place
0 2023-05-24
编程技术问答社区
Python。使用多处理模块作为可能的解决方案来提高我的函数的速度
i在Python 2.7(在Window OS 64位上)中写了一个函数,以便从参考多边形(REF)(参考)和一个或多个分段(Seg)Polygon(s)中计算相交区域的平均值. a href =" http://en.wikipedia.org/wiki/shapefile" rel =" nofollow"> shapefile格式.该代码非常慢,因为我有更多的2000参考多边形,对于每个ref_polygon,每次为所有SEG多边形(S)(超过7000)运行的功能.很抱歉,功能是原型. 我想知道多处理我的循环或有更多的性能解决方案.如果多处理可能是可能的解决方案,我希望知道优化以下功能的最佳方法 import numpy as np import ogr import osr,gdal from shapely.geometry import Polygon from shapely.geometry import Point import osgeo.gdal imp
2 2023-05-24
编程技术问答社区
对一个面向队列的函数使用多处理后,性能没有提高
我要优化的真实代码太复杂了,以至于这里包括一个简化的示例: def enumerate_paths(n, k): """ John want to go up a flight of stairs that has N steps. He can take up to K steps each time. This function enumerate all different ways he can go up this flight of stairs. """ paths = [] to_analyze = [(0,)] while to_analyze: path = to_analyze.pop() last_step = path[-1] if last_step >= n: # John has reach the top
2 2023-05-24
编程技术问答社区
多线程或多进程
因此,目前,我正在使用多处理一起运行这3个功能. 作为只有令牌更改,是否建议切换到多线程? (如果是的,这对诸如加速速度之类的表现确实有帮助,我认为内存肯定会少使用) ) 这是我的代码: from database_function import * from kiteconnect import KiteTicker import pandas as pd from datetime import datetime, timedelta import schedule import time from multiprocessing import Process def tick_A(): #credentials code here tokens = [x[0] for x in db_fetchquery("SELECT zerodha FROM script ORDER BY id ASC LIMIT 50")] #FETCHING
6 2023-05-24
编程技术问答社区
在4个CPU上执行CPU绑定的任务时,20个进程中的400个线程比4个进程中的400个线程更出色
这个问题与 20个过程中的400个线程在执行I/O-BOUND任务时在4个过程中超过400个线程.唯一的区别是链接的问题是关于I/O结合任务的,而这个问题是关于CPU结合的任务. 实验代码 这是可以启动指定数量的工艺过程的实验代码,然后在每个过程中启动指定数量的工作线程并执行计算n-prime数字的任务. import math import multiprocessing import random import sys import time import threading def main(): processes = int(sys.argv[1]) threads = int(sys.argv[2]) tasks = int(sys.argv[3]) # Start workers. in_q = multiprocessing.Queue() process_workers = [] for _
6 2023-05-24
编程技术问答社区
Python多处理(在较小的块中拆分数据 - 多函数参数)
注释22.02.21的注释: - 优势,我的问题也可以通过更有效的内存使用而不是多处理来解决,因为我意识到内存负载非常高,并且可能是这里的限制因素. 我正在尝试减少脚本通过使用多处理来运行的时间. 在过去np.where()循环),但是现在我想利用 32核工作站的所有内核. 我的功能将两个列表(x和y)的条目与参考列表进行比较.对于x/y中的每个元素,它检查x [i]是否出现在q中的某个地方,以及y [i]是否发生在z中. x [i] == q [s]和y [i] == z [s],它返回索引" s". (注意:我的真实数据包括DNA测序读取,我需要将读取映射到参考.) 我到目前为止尝试的是: 分裂我的长列表x和y 甚至块(n-chunks,n == cpu_count) 尝试" conturrent.futures.futures.processpoolexecutor()"以并行运行每个" sublist"的函数,最后将每个过程的结果结合到一个最终词典(Match