Python线程、进程、进程池、协程

Python线程,切记Python的GIL特性

import threading


def func():
    print(threading.current_thread().getName())
    pass

class MyThread(threading.Thread):
    def run(self):
        print(threading.current_thread().getName())

def main():
    print(threading.current_thread().getName())

    #创建线程
    thread = threading.Thread(target=func)
    thread.start()
    #thread.join()

    #创建线程
    t2 = MyThread()
    t2.start()
    t2.join()

    print("programs is finished.")


if __name__ == "__main__":
    main()
 输出

MainThread
Thread-1
Thread-2
programs is finished.

Python进程

import multiprocessing
import os

def worker():
    print( "Child ProcessID:" + str(os.getpid()) )
    print("working...")


def main():
    print( "Main ProcessID:" + str(os.getpid()) )

    #创建进程
    p = multiprocessing.Process(target=worker)
    p.start();
    p.join();

    print("programs is finished.")


if __name__ == "__main__":
    main()
 
输出 

Main ProcessID:33452
Child ProcessID:616
working...
programs is finished.


Python进程池

import multiprocessing
from multiprocessing import Pool
import os
import time

def worker(i):
    print( "Child ProcessID:" + str(os.getpid()) )

    print("working..." + str(i))
    time.sleep(1)

def callback(arg):
    print(arg)

def main():
    print( "Main ProcessID:" + str(os.getpid()) )

    pool = Pool(4)
    #创建进程
    for i in range(10):
        pool.apply(func=worker, args=(i,))
        #pool.apply(func=worker, args=(i,), callback=callback)

    print("programs is finished.")


if __name__ == "__main__":
    main()

输出

Main ProcessID:27824
Child ProcessID:23104
working...0
Child ProcessID:32968
working...1
Child ProcessID:26228
working...2
Child ProcessID:31036
working...3
Child ProcessID:23104
working...4
Child ProcessID:32968
working...5
Child ProcessID:26228
working...6
Child ProcessID:31036
working...7
Child ProcessID:23104
working...8
Child ProcessID:32968
working...9
programs is finished.


Python协程一

import asyncio


@asyncio.coroutine
def hello():
    print("hello the world")
    r = yield from asyncio.sleep(1)
    print("hello again")

def main():
    loop = asyncio.get_event_loop()
    """
    tasks = [
        asyncio.ensure_future(hello()),
    ]
    loop.run_until_complete(asyncio.wait(tasks))
    """
    print("begin")
    loop.run_until_complete(hello())
    print("end")
    loop.close()

    print("program is finished.")


if __name__ == "__main__":
    main()

Python协程二

import asyncio


async def hello():
    print("hello the world")
    r = await asyncio.sleep(1)
    print("hello again")

def main():
    loop = asyncio.get_event_loop()
    """
    tasks = [
        asyncio.ensure_future(hello()),
    ]
    loop.run_until_complete(asyncio.wait(tasks))
    """
    print("begin")
    loop.run_until_complete(hello())
    print("end")
    loop.close()

    print("program is finished.")


if __name__ == "__main__":
    main()

输出

begin
hello the world
hello again
end
program is finished.


你可能感兴趣的:(----Python)