python 多线程多进程
时间: 2023-12-23 18:27:54 浏览: 73
以下是Python中多线程和多进程的常用操作:
1. 调用进程:
```python
import multiprocessing
def worker():
print("This is a worker process")
if __name__ == '__main__':
p = multiprocessing.Process(target=worker)
p.start()
p.join()
```
2. 进程池:
```python
import multiprocessing
def worker(num):
print("This is worker", num)
if __name__ == '__main__':
pool = multiprocessing.Pool(processes=3)
for i in range(3):
pool.apply_async(worker, (i,))
pool.close()
pool.join()
```
3. 进程通信(Pipe, Queue):
```python
import multiprocessing
def sender(conn):
conn.send("Hello from sender")
conn.close()
def receiver(conn):
msg = conn.recv()
print("Received message:", msg)
conn.close()
if __name__ == '__main__':
parent_conn, child_conn = multiprocessing.Pipe()
p1 = multiprocessing.Process(target=sender, args=(child_conn,))
p2 = multiprocessing.Process(target=receiver, args=(parent_conn,))
p1.start()
p2.start()
p1.join()
p2.join()
```
4. 调用线程:
```python
import threading
def worker():
print("This is a worker thread")
if __name__ == '__main__':
t = threading.Thread(target=worker)
t.start()
t.join()
```
5. 锁(Lock):
```python
import threading
counter = 0
lock = threading.Lock()
def increment():
global counter
with lock:
counter += 1
if __name__ == '__main__':
threads = []
for _ in range(10):
t = threading.Thread(target=increment)
t.start()
threads.append(t)
for t in threads:
t.join()
print("Counter:", counter)
```
6. threading.local():
```python
import threading
local_data = threading.local()
def worker():
local_data.value = 123
print("Worker value:", local_data.value)
if __name__ == '__main__':
t = threading.Thread(target=worker)
t.start()
t.join()
```