PYTHON多进程样码

简介: 敲了一晚上,留个念想。 发现它和LINUX的C编程差不多,就是作了PYTHON化的语法封装。 以后希望有机会能用上。。 A,多进程函数化实现 import multiprocessing import time def worker_1(interval): n = 5...

敲了一晚上,留个念想。

发现它和LINUX的C编程差不多,就是作了PYTHON化的语法封装。

以后希望有机会能用上。。

A,多进程函数化实现

import multiprocessing
import time

def worker_1(interval):
    n = 5
    while n > 0:
        # print('The time is {0}'.format(time.ctime()))
        print 'start worker_1'
        time.sleep(interval)
        n -= 1
        print 'end worker_1'

def worker_2(interval):
    n = 5
    while n > 0:
        # print('The time is {0}'.format(time.ctime()))
        print 'start worker_2'
        time.sleep(interval)
        n -= 1
        print 'end worker_2'

def worker_3(interval):
    n = 5
    while n > 0:
        # print('The time is {0}'.format(time.ctime()))
        print 'start worker_3'
        time.sleep(interval)
        n -= 1
        print 'end worker_3'

if __name__ == '__main__':
    p1 = multiprocessing.Process(target=worker_1, args=(1,))
    p2 = multiprocessing.Process(target=worker_2, args=(2,))
    p3 = multiprocessing.Process(target=worker_3, args=(3,))
    
    p1.start()
    p2.start()
    p3.start()

    print 'The number of CPU is:' + str(multiprocessing.cpu_count())
    for p in multiprocessing.active_children():
        print 'child p.name:' + p.name + '\tp.id' + str(p.pid)
    print 'END!!!!!!!!!!!'

B,多进程类实现

import multiprocessing
import time

class ClockProcess(multiprocessing.Process):
    def __init__(self, interval):
        multiprocessing.Process.__init__(self)
        self.interval = interval

    def run(self):
        n = 5
        while n >0:
            print 'The time is {0}'.format(time.ctime())
            time.sleep(self.interval)
            n -= 1

if __name__ == '__main__':
    p = ClockProcess(3)
    p.start()

C,多进程DAEMON

import multiprocessing
import time

def worker(interval):
    print 'worker start:{0}'.format(time.ctime())
    time.sleep(interval)
    print 'worker end:{0}'.format(time.ctime())

if __name__ == '__main__':
    p = multiprocessing.Process(target=worker, args=(3,))
    p.daemon = True
    p.start()
    p.join()
    print 'end'

D,LOCK

import multiprocessing
import sys

def worker_with(lock, f):
    with lock:
        fs = open(f, 'a+')
        n = 10
        while n > 1:
            fs.write('Lock acquired via with\n')
            n -= 1
        fs.close

def worker_no_with(lock, f):
    lock.acquire()
    try:
        fs = open(f, 'a+')
        n = 10
        while n > 1:
            fs.write('Lock acquired directly\n')
            n -= 1
        fs.close()
    finally:
        lock.release()

if __name__ == '__main__':
    lock = multiprocessing.Lock()
    f = 'file.txt'
    w = multiprocessing.Process(target=worker_with, args=(lock, f))
    nw = multiprocessing.Process(target=worker_no_with, args=(lock, f))
    w.start()
    nw.start()
    print 'end'
    

E。SEMAPHORE

import multiprocessing
import time

def worker(s, i):
    s.acquire()
    print(multiprocessing.current_process().name +'acquire')
    time.sleep(i)
    print(multiprocessing.current_process().name + 'release')
    s.release()

if __name__ == '__main__':
    s = multiprocessing.Semaphore(2)
    for i in range(5):
        print i
        p = multiprocessing.Process(target=worker, args=(s, i))
        p.start()

F,EVENT

import multiprocessing
import time

def wait_for_event(e):
    print 'wait_for_event: starting'
    e.wait()
    print 'wait_for_event: e.is_set()->' + str(e.is_set())
    

def wait_for_event_timeout(e, t):
    print 'wait_for_event_timeout: starting'
    e.wait(t)
    print 'wait_for_event_timeout: e.is_set()->' + str(e.is_set())

if __name__ == '__main__':
    e = multiprocessing.Event()
    w1 = multiprocessing.Process(name='block',
                                 target=wait_for_event,
                                 args=(e,))
    w2 = multiprocessing.Process(name='non-block',
                                 target=wait_for_event_timeout,
                                 args=(e,2))
    w1.start()
    w2.start()
    time.sleep(3)
    e.set()
    print 'main: event is set'

G,PIPE

import multiprocessing
import time

def proc1(pipe):
    while True:
        for i in xrange(10):
            print 'proc1 send: %s' % (i)
            pipe.send(i)
            time.sleep(1)

def proc2(pipe):
    while True:
        print 'proc2 rev:', pipe.recv()
        time.sleep(1)

if __name__ == '__main__':
    pipe = multiprocessing.Pipe()
    p1 = multiprocessing.Process(target=proc1, args=(pipe[0],))
    p2 = multiprocessing.Process(target=proc2, args=(pipe[1],))

    p1.start()
    p2.start()

    p1.join()
    p2.join()

H。Queue

import multiprocessing


def writer_proc(q):
    try:
        q.put(1, block=False)
        q.put(2, block=False)
        q.put(3, block=False)
    except:
        pass

def reader_proc(q):
    try:
        print q.get(block=False)
        print q.get(block=False)
        print q.get(block=False)
    except:
        pass

if __name__ == '__main__':
    q = multiprocessing.Queue()
    writer = multiprocessing.Process(target=writer_proc, args=(q,))
    writer.start()

    reader = multiprocessing.Process(target=reader_proc, args=(q,))
    reader.start()

    reader.join()
    writer.join()

    

照搬:

http://www.cnblogs.com/kaituorensheng/p/4445418.html

还有一个POOL,明天补上。

目录
相关文章
|
11月前
|
监控 编译器 Python
如何利用Python杀进程并保持驻留后台检测
本教程介绍如何使用Python编写进程监控与杀进程脚本,结合psutil库实现后台驻留、定时检测并强制终止指定进程。内容涵盖基础杀进程、多进程处理、自动退出机制、管理员权限启动及图形界面设计,并提供将脚本打包为exe的方法,适用于需持续清理顽固进程的场景。
|
数据采集 Java 数据处理
Python实用技巧:轻松驾驭多线程与多进程,加速任务执行
在Python编程中,多线程和多进程是提升程序效率的关键工具。多线程适用于I/O密集型任务,如文件读写、网络请求;多进程则适合CPU密集型任务,如科学计算、图像处理。本文详细介绍这两种并发编程方式的基本用法及应用场景,并通过实例代码展示如何使用threading、multiprocessing模块及线程池、进程池来优化程序性能。结合实际案例,帮助读者掌握并发编程技巧,提高程序执行速度和资源利用率。
782 0
|
并行计算 数据处理 调度
Python中的并发编程:探索多线程与多进程的奥秘####
本文深入探讨了Python中并发编程的两种主要方式——多线程与多进程,通过对比分析它们的工作原理、适用场景及性能差异,揭示了在不同应用需求下如何合理选择并发模型。文章首先简述了并发编程的基本概念,随后详细阐述了Python中多线程与多进程的实现机制,包括GIL(全局解释器锁)对多线程的影响以及多进程的独立内存空间特性。最后,通过实例演示了如何在Python项目中有效利用多线程和多进程提升程序性能。 ####
|
调度 iOS开发 MacOS
python多进程一文够了!!!
本文介绍了高效编程中的多任务原理及其在Python中的实现。主要内容包括多任务的概念、单核和多核CPU的多任务实现、并发与并行的区别、多任务的实现方式(多进程、多线程、协程等)。详细讲解了进程的概念、使用方法、全局变量在多个子进程中的共享问题、启动大量子进程的方法、进程间通信(队列、字典、列表共享)、生产者消费者模型的实现,以及一个实际案例——抓取斗图网站的图片。通过这些内容,读者可以深入理解多任务编程的原理和实践技巧。
915 1
Python中的多线程与多进程
本文将探讨Python中多线程和多进程的基本概念、使用场景以及实现方式。通过对比分析,我们将了解何时使用多线程或多进程更为合适,并提供一些实用的代码示例来帮助读者更好地理解这两种并发编程技术。
|
数据挖掘 程序员 调度
探索Python的并发编程:线程与进程的实战应用
【10月更文挑战第4天】 本文深入探讨了Python中实现并发编程的两种主要方式——线程和进程,通过对比分析它们的特点、适用场景以及在实际编程中的应用,为读者提供清晰的指导。同时,文章还介绍了一些高级并发模型如协程,并给出了性能优化的建议。
228 3
|
负载均衡 Java 调度
探索Python的并发编程:线程与进程的比较与应用
本文旨在深入探讨Python中的并发编程,重点比较线程与进程的异同、适用场景及实现方法。通过分析GIL对线程并发的影响,以及进程间通信的成本,我们将揭示何时选择线程或进程更为合理。同时,文章将提供实用的代码示例,帮助读者更好地理解并运用这些概念,以提升多任务处理的效率和性能。
313 3
|
监控 JavaScript 前端开发
python中的线程和进程(一文带你了解)
欢迎来到瑞雨溪的博客,这里是一位热爱JavaScript和Vue的大一学生分享技术心得的地方。如果你从我的文章中有所收获,欢迎关注我,我将持续更新更多优质内容,你的支持是我前进的动力!🎉🎉🎉
284 0
|
存储 Python
Python中的多进程通信实践指南
Python中的多进程通信实践指南
344 0
|
数据采集 消息中间件 Python
Python爬虫-进程间通信
Python爬虫-进程间通信
183 0

推荐镜像

更多