当前位置:首页 » 编程软件 » 脚本多进程

脚本多进程

发布时间: 2022-12-26 09:59:09

‘壹’ 有办法在windows下实现php的多进程编程

(1)下载后得到php-5.1.2-Win32.zip,解压至C:\php(这个路径可以随意,不过下面要是用到这个路径,请相应修改);(2)再将C:\php\libmysql.dll和C:\Inetpub\php\ext\php_mysql.dll复制到C:\Windows\system32下;(3)将C:\PHP\php.ini-dist复制到C:\Windows(Windows2000下为C:\WINNT)并将改名为php.ini,然后用记事本打开,利用记事本的查找功能搜索:extension_dir="C:\PHP\ext"将其路径指到你的PHP目录下的extensions目录,比如:extension_dir="C:\Inetpub\php\ext";搜索;WindowsExtensions并仅打开需要的模块以节省内存(去掉每个模块前的;号即可):extension=php_gd2.dllGD库支持,如果不打开该模块则Discuz!论坛图片水印不能使用。extension=php_mbstring.dll为了支持phpMyAdmin,打开mbstring。extension=php_mysql.dll不用说了吧,支持MySQL。首先必须确定系统中已经正确安装IIS,如果没有安装,需要先安装IIS。PHP与IIS整合时支持CGI和ISAPI两种模式,推荐使用ISAPI模式。这里只解介绍ISAPI模式安装方法:ISAPI模式安装步骤:在“控制面板”的“管理工具”中选择“Internet服务管理器”,打开IIS后停止服务,然后在左侧“你需要支持PHP的Web站点上单击右键选择“属性”,在打开的“Web站点属性”窗口的“ISAPI筛选器”标签里找到并点击“添加”按钮,在弹出的“筛选器属性”窗口中的“筛选器名称”栏中输入:PHP,再将可执行文件指向php5isapi.dll所在路径,如:C:\PHP\php5isapi.dll。打开“Web站点属性”窗口的“主目录”标签,找到并点击“配置”按钮,在弹出的“应用程序配置”窗口中找到并点击“添加”按钮,在弹出的窗口中新增一个扩展名映射,扩展名为.php,单击“浏览”将可执行文件指向php5isapi.dll所在路径,如:C:\PHP\php5isapi.dll,然后一路确定即可。确定Web目录的应用程序设置和执行许可中选择为纯脚本,然后关闭Internet信息服务管理器,在命令提示符中执行如下命令:然后在“Internet服务管理器”左边的“WEB服务扩展”中设置ISAPI扩展允许,ActiveServerPages允许

‘贰’ python入门系列(十二)——GUI+多进程

话说,python做图形界面并不明智,效率并不高。但在某些特殊需求下还是需要我们去使用,所以python拥有多个第三方库用以实现GUI,本章我们使用python基本模块tkinter进行学习,因为需求并不大,所以不做太多拓展。
继续改写上一章的IP查询系统(= =,要玩烂了),首先略改下IpWhere.py以备调用~

然后使用tkinter模块进行图形界面的实现,调用预编译的IpWhere模块 :

额,太丑了,但基本实现我们小小的需求,在以后的py学习中,我们再涉及其他的第三方模块,此处就当是入门了解吧。

十分抱歉把这么重要的内容放在最后,要不是大佬指点,此次学习可能就要错过多进程的问题了。
Unix系统提供了forx,python可借助os模块调用,从而实现多进程,然而windows系统并不具备,所以我们选择python内置的multiprocessing多进程模块进行学习。

首先我们借助直接调用多进程来改写下我们在多线程章节用到的例子!

显然,这么写实在太蠢了,如果我们的任务量巨大,这并不合适。所以我们引入了进程池的概念,使用进程池进行改写:

在此,我们可以看到所有进程是并发执行的,同样,我们在多线程章节就讲过,主进程的结束意味着程序退出,所以我们需要借助join()方法堵塞进程。

我们知道线程共享内存空间,而进程的内存是独立的,同一个进程的线程之间可以直接交流,也就带来了线程同步的苦恼,这个我们在多线程章节已经讲过了;而两个进程想通信,则必须通过一个中间代理来实现,即我们接下来的内容:进程间通信。

进程之间肯定是需要通信的,操作系统提供了很多机制来实现进程间的通信。Python的multiprocessing模块包装了底层的机制,提供了Queue、Pipes等多种方式来交换数据。我们接下来就以Queue的方式进行学习。

Queue.Queue是进程内非阻塞队列,multiprocess.Queue是跨进程通信队列,前者是各自私有,后者是各子进程共有。

还有一个在后者基础上进行封装的multiprocess.Manager.Queue()方法,如果要使用Pool创建进程,就需要使用multiprocessing.Manager()中的Queue(),而不是multiprocessing.Queue(),否则会得到一条如下的错误信息: RuntimeError: Queue objects should only be shared between processes through inheritance.

接下来我们就借助进程池来进行多进程操作的改写,感谢大佬一路辅导。

我们可以看到两个子线程先执行,然后一个子线程单独执行,此处有意而为之,让大家更清晰的了解队列的使用。期间有一处我们放弃使用jion()方法堵塞,而是自己写了个循环堵塞,大家根据自己习惯来就好。

话说,真的没人吐槽么?上面的例子从需求上来讲,完全就不需要多线程好不好!emmmm,我们来点实力拓展,写一个有智商的多线程脚本,顺便结合上一节的web来一个综合篇,随便找个现实需求吧!

emmm,比如我们来到当当网买书,搜一下我们想要的书籍,发现!!太多了!!真J2乱!!看不过来!!不想翻页!!直接告诉我哪个便宜、哪个牛逼好不好!!

简单看下这个url:
http://search.dangdang.com/?key=渗透测试&ddsale=1&page_index=2
其中ddsale参数代表当当自营,page_index代表页数,key代表搜索内容,我们本次的变量只有页数。

所以我们构造请求的url为:
'http://search.dangdang.com/?key=渗透测试&ddsale=1&page_index='+str(page)
如果修改的内容不使用str字符串转化,会收到如下报错:
TypeError: can only concatenate str (not "int") to str
然后我们看一下页面内容的分布情况,本次我们关心卖什么书,卖多少钱?

对应的编写我们的正则匹配规则,当然了,有更简便的第三方库可以帮我们处理,但为了更好的形成流程性认识,我们这里依然使用正则。
我们对应我们需要的书籍名称和当前价格匹配如下:
<a title=" (.*?)" ddclick=
<span class="search_now_price">¥(.*?)</span>
那么,思路理清了,我们就开始使用多线程来写我们的小系统~

然后我们去查看一下我们的结果文件~

现在这个小系统具备的功能就是根据用户需要选择要检索的书籍,然后整理下名称和价格,开了10个线程,如果小伙伴pc给力的话可以继续加。简单的异常处理机制和界面交互,基本满足日常所需。

‘叁’ 一个for循环的Python脚本程序中如何加入多进程(并发进程)呢,急急急,在线等

简单的如下


defps(i):
print(str(i))
defrun():
foriinrange(5):
Process(target=ps,args=(i,)).start()
if__name__=="__main__":
run()

‘肆’ python 多进程 进程池子进程结束怎么获取

在利用Python进行系统管理的时候,特别是同时操作多个文件目录,或者远程控制多台主机,并行操作可以节约大量的时间。当被操作对象数目不大时,可以直接利用multiprocessing中的Process动态成生多个进程,10几个还好,但如果是上百个,上千个目标,手动的去限制进程数量却又太过繁琐,这时候进程池Pool发挥作用的时候就到了。
Pool可以提供指定数量的进程,供用户调用,当有新的请求提交到pool中时,如果池还没有满,那么就会创建一个新的进程用来执行该请求;但如果池中的进程数已经达到规定最大值,那么该请求就会等待,直到池中有进程结束,才会创建新的进程来它。这里有一个简单的例子:

#!/usr/bin/env python

#coding=utf-8

"""

Author: Squall

Last modified: 2011-10-18 16:50

Filename: pool.py

Description: a simple sample for pool class

"""

from multiprocessing import Pool

from time import sleep

def f(x):

for i in range(10):

print '%s --- %s ' % (i, x)

sleep(1)

def main():

pool = Pool(processes=3) # set the processes max number 3

for i in range(11,20):

result = pool.apply_async(f, (i,))

pool.close()

pool.join()

if result.successful():

print 'successful'

if __name__ == "__main__":

main()
先创建容量为3的进程池,然后将f(i)依次传递给它,运行脚本后利用ps aux | grep pool.py查看进程情况,会发现最多只会有三个进程执行。pool.apply_async()用来向进程池提交目标请求,pool.join()是用来等待进程池中的worker进程执行完毕,防止主进程在worker进程结束前结束。但必pool.join()必须使用在pool.close()或者pool.terminate()之后。其中close()跟terminate()的区别在于close()会等待池中的worker进程执行结束再关闭pool,而terminate()则是直接关闭。result.successful()表示整个调用执行的状态,如果还有worker没有执行完,则会抛出AssertionError异常。
利用multiprocessing下的Pool可以很方便的同时自动处理几百或者上千个并行操作,脚本的复杂性也大大降低。

‘伍’ Linux 监控多进程脚本

如果 abcd路径不一样就很难弄!

#!/bin/bash
for i in a b c d;do
var=`ps -e|awk '$4=='"$i"''`
var1=`echo $var|awk '{print $4}'`
if [ ! $var1==$i ];then /var/$i;fi
done

‘陆’ python 多进程是真的并发吗

Python提供了非常好用的多进程包multiprocessing,你只需要定义一个函数,Python会替你完成其他所有事情。
借助这个包,可以轻松完成从单进程到并发执行的转换。

1、新建单一进程
如果我们新建少量进程,可以如下:
import multiprocessing
import time

def func(msg):
for i in xrange(3):
print msg
time.sleep(1)

if __name__ == "__main__":
p = multiprocessing.Process(target=func, args=("hello", ))
p.start()
p.join()
print "Sub-process done."12345678910111213

2、使用进程池
是的,你没有看错,不是线程池。它可以让你跑满多核CPU,而且使用方法非常简单。
注意要用apply_async,如果落下async,就变成阻塞版本了。
processes=4是最多并发进程数量。
import multiprocessing
import time

def func(msg):
for i in xrange(3):
print msg
time.sleep(1)

if __name__ == "__main__":
pool = multiprocessing.Pool(processes=4)
for i in xrange(10):
msg = "hello %d" %(i)
pool.apply_async(func, (msg, ))
pool.close()
pool.join()
print "Sub-process(es) done."12345678910111213141516

3、使用Pool,并需要关注结果
更多的时候,我们不仅需要多进程执行,还需要关注每个进程的执行结果,如下:
import multiprocessing
import time

def func(msg):
for i in xrange(3):
print msg
time.sleep(1)
return "done " + msg

if __name__ == "__main__":
pool = multiprocessing.Pool(processes=4)
result = []
for i in xrange(10):
msg = "hello %d" %(i)
result.append(pool.apply_async(func, (msg, )))
pool.close()
pool.join()
for res in result:
print res.get()
print "Sub-process(es) done."

2014.12.25更新
根据网友评论中的反馈,在Windows下运行有可能崩溃(开启了一大堆新窗口、进程),可以通过如下调用来解决:
multiprocessing.freeze_support()1

附录(自己的脚本):
#!/usr/bin/python
import threading
import subprocess
import datetime
import multiprocessing

def dd_test(round, th):
test_file_arg = 'of=/zbkc/test_mds_crash/1m_%s_%s_{}' %(round, th)
command = "seq 100 | xargs -i dd if=/dev/zero %s bs=1M count=1" %test_file_arg
print command
subprocess.call(command,shell=True,stdout=open('/dev/null','w'),stderr=subprocess.STDOUT)

def mds_stat(round):
p = subprocess.Popen("zbkc mds stat", shell = True, stdout = subprocess.PIPE)
out = p.stdout.readlines()
if out[0].find('active') != -1:
command = "echo '0205pm %s round mds status OK, %s' >> /round_record" %(round, datetime.datetime.now())
command_2 = "time (ls /zbkc/test_mds_crash/) 2>>/round_record"
command_3 = "ls /zbkc/test_mds_crash | wc -l >> /round_record"
subprocess.call(command,shell=True)
subprocess.call(command_2,shell=True)
subprocess.call(command_3,shell=True)
return 1
else:
command = "echo '0205 %s round mds status abnormal, %s, %s' >> /round_record" %(round, out[0], datetime.datetime.now())
subprocess.call(command,shell=True)
return 0

#threads = []
for round in range(1, 1600):
pool = multiprocessing.Pool(processes = 10) #使用进程池
for th in range(10):
# th_name = "thread-" + str(th)
# threads.append(th_name) #添加线程到线程列表
# threading.Thread(target = dd_test, args = (round, th), name = th_name).start() #创建多线程任务
pool.apply_async(dd_test, (round, th))
pool.close()
pool.join()
#等待线程完成
# for t in threads:
# t.join()

if mds_stat(round) == 0:
subprocess.call("zbkc -s",shell=True)
break

‘柒’ 如何让一个Python的脚本跑满多核的CPU

python由于GIL的关系,python的多线程并没有发挥多核的作用,这些线程都是在在单核上跑的
所以要想发挥多核的作用,就需要使用多进程,尽可能的在每一个CPU核心上分配到一个python进程。
所以要想跑满多核CPU就得多进程多线程互相结合

热点内容
solidworkspcb服务器地址 发布:2025-07-18 22:50:35 浏览:815
怎么在堆叠交换机里配置vlan 发布:2025-07-18 22:42:35 浏览:623
java调用别人的接口 发布:2025-07-18 22:37:35 浏览:433
服务器四个节点如何联网 发布:2025-07-18 22:36:02 浏览:271
华强北什么地方休安卓手机 发布:2025-07-18 22:24:56 浏览:735
数据库的根本目标 发布:2025-07-18 21:37:50 浏览:938
压缩机的流速 发布:2025-07-18 21:37:40 浏览:407
三星怎么取消手机密码 发布:2025-07-18 21:33:50 浏览:630
安卓手机耳机如何弹窗显示电量 发布:2025-07-18 21:20:53 浏览:60
云服务器搭建需要什么工具 发布:2025-07-18 20:51:08 浏览:322