Пример #1
0
    print('All subprocesses done.')

#3、子进程,用于调用一个外部进程(例如一条命令),需要控制子进程的输入和输出
import subprocess

print('$ nslookup www.python.org')
r = subprocess.call(['nslookup', 'www.python.org'])
print('Exit code:', r)

print('$ nslookup')
p = subprocess.Popen(['nslookup'],
                     stdin=subprocess.PIPE,
                     stdout=subprocess.PIPE,
                     stderr=subprocess.PIPE)
output, err = p.communicate(
    b'set q=mx\npython.org\nexit\n'
)  #相当于在命令行执行命令nslookup,然后手动输入:set q=mx python.org exit
print(output.decode('utf-8'))
print('Exit code:', p.returncode)

#4、进程间通信,Python的multiprocessing模块包装了底层的机制,提供了Queue、Pipes等多种方式来交换数据。由于Windows没有fork调用,因此,multiprocessing需要“模拟”出fork的效果,父进程所有Python对象都必须通过pickle序列化再传到子进程去
from multiprocessing import Process, Queue
import os, time, random


def write(q):  #写数据进程执行的代码:
    print('Process to write: %s' % os.getpid())
    for value in ['A', 'B', 'C']:
        print('Put %s to queue...' % value)
        q.put(value)
        time.sleep(random.random())
Пример #2
0
def long_time_task(name):
    print('Run task %s (%s)...' % (name, os.getpid()))
    start = time.time()
    time.sleep(random.random() * 3)
    end = time.time()
    print('Task %s runs %0.2f seconds.' % (name, (end - start)))
    if __name__ == '__main__':
        print('Parent process %s:' % os.getpid())
        p = Pool(4)
        for i in range(5):
            p.apply_async(long_time_task, args=(i, ))
        print('Waiting for all subprocesses done...')
        p.close()
        p.join()
        print('All subprocesses done.')
    #控制进程的输入与输出
    import subprocess
    print('$ nslookup www.python.org')
    r = subprocess.call(['nslookup', 'www.python.org'])
    print('Exit code', r)
    #子进程还需要输入
    print('$ nslookup')
    p = subprocess.Popen(['nslookup'],
                         stdin=subprocess.PIPE,
                         stdout=subprocess.PIPE,
                         stderr=subprocess.PIPE)
    output, err = p.communicate(b'set q=mx\npython.org\nexit\n')
    print(output.decode('utf-8'))
    print('Exit code:', p.returncode)
    #进程间通信
    from multiprocessing import Process, Queue
    import os, time, random

    #写数据进程执行的代码
    def write(q):
        print('Process to write:%s' % os.getpid())
        for value in ['A', 'B', 'C']:
            print('Put %s to queue...' % value)
            q.put(value)
            time.sleep(random.random())

    #读数据进程执行的代码
    def read(q):
        print('Process to read: %s' % os.getpid())
        while True:
            value = q.get(True)
            print('Get % from queue.' % value)

    if __name__ == '__main__':
        #父进程创建Queue,并传递给各个子进程
        q = Queue()
        pw = Process(target=write, args=(q, ))
        pr = Process(target=read, args=(q, ))
        #启动子进程pw,写入
        pw.start()
        #启动子进程pr,读取
        pr.start()
        #等待pw结束
        pw.join()
        #pr进程里是死循环,无法等待其结束,只能强行终止
        pr.terminate()
Пример #3
0
    return 'done {0}'.format(name)


if __name__ == '__main__':
    print('Parent process {0} is running'.format(os.getpid()))
    p = Pool(4)
    result = []
    for i in range(5):
        result.append(p.apply_async(long_time_task, (i, )))
    print('Waiting for all subprocesses done...')
    p.close()
    p.join()
    print('All subprocesses done')
    # print(result)
    for res in result:
        print(res.get())

import subprocess
print('nslookup www.python.org')
res = subprocess.call(['nslookup', 'www.python.org'])
print('Exit code:{0}'.format(res))

print('$ nslookup')
p = subprocess.Popen(['nslookup'],
                     stdin=subprocess.PIPE,
                     stdout=subprocess.PIPE,
                     stderr=subprocess.PIPE)
output, err = p.communicate(b'set q=mx\npython.org\nexit\n')
print(output.decode('utf-8'))
print('Exit code {0}'.format(p.returncode))
Пример #4
0
    end   = time.time()
    print('Task {0} {1:.2} seconds'.format(name, end-start))
    return 'done {0}'.format(name)

if __name__ == '__main__':
    print('Parent process {0} is running'.format(os.getpid()))
    p = Pool(4)
    result = []
    for i in range(5):
        result.append(p.apply_async(long_time_task, (i,)))
    print('Waiting for all subprocesses done...')
    p.close()
    p.join()
    print('All subprocesses done')
    # print(result)
    for res in result:
        print(res.get())

import subprocess
print('nslookup www.python.org')
res = subprocess.call(['nslookup','www.python.org'])
print('Exit code:{0}'.format(res))

print('$ nslookup')
p = subprocess.Popen(['nslookup'],stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
output, err = p.communicate(b'set q=mx\npython.org\nexit\n')
print(output.decode('utf-8'))
print('Exit code {0}'.format(p.returncode))