mirror of
https://github.com/autistic-symposium/web3-starter-py.git
synced 2025-05-17 22:20:22 -04:00
add more concurrent examples
This commit is contained in:
parent
6c65e7d226
commit
f35541a061
3 changed files with 104 additions and 0 deletions
47
Concurrence_examples/concurrent_tasks_with_math.py
Normal file
47
Concurrence_examples/concurrent_tasks_with_math.py
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
import os
|
||||||
|
import time
|
||||||
|
import threading
|
||||||
|
import multiprocessing
|
||||||
|
|
||||||
|
NUM_WORKERS = 4
|
||||||
|
|
||||||
|
def run_numbers():
|
||||||
|
print("PID: %s, Process Name: %s, Thread Name: %s" % (
|
||||||
|
os.getpid(),
|
||||||
|
multiprocessing.current_process().name,
|
||||||
|
threading.current_thread().name)
|
||||||
|
)
|
||||||
|
x = 0
|
||||||
|
while x < 10000000:
|
||||||
|
x += 1
|
||||||
|
|
||||||
|
start_time = time.time()
|
||||||
|
|
||||||
|
for _ in range(NUM_WORKERS):
|
||||||
|
run_numbers()
|
||||||
|
|
||||||
|
end_time = time.time()
|
||||||
|
|
||||||
|
print("Serial time=", end_time - start_time)
|
||||||
|
|
||||||
|
|
||||||
|
start_time = time.time()
|
||||||
|
|
||||||
|
threads = [threading.Thread(target=run_numbers) for _ in range(NUM_WORKERS)]
|
||||||
|
[thread.start() for thread in threads]
|
||||||
|
[thread.join() for thread in threads]
|
||||||
|
|
||||||
|
end_time = time.time()
|
||||||
|
|
||||||
|
print("Threads time=", end_time - start_time)
|
||||||
|
|
||||||
|
|
||||||
|
start_time = time.time()
|
||||||
|
|
||||||
|
processes = [multiprocessing.Process(target=run_numbers) for _ in range(NUM_WORKERS)]
|
||||||
|
[process.start() for process in processes]
|
||||||
|
[process.join() for process in processes]
|
||||||
|
end_time = time.time()
|
||||||
|
|
||||||
|
|
||||||
|
print("Parallel time=", end_time - start_time)
|
23
Concurrence_examples/getenv_example.py
Normal file
23
Concurrence_examples/getenv_example.py
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
import time
|
||||||
|
from gevent.pool import Pool
|
||||||
|
from gevent import monkey
|
||||||
|
|
||||||
|
# Note that you can spawn many workers with gevent since the cost of creating and switching is very low
|
||||||
|
NUM_WORKERS = 4
|
||||||
|
|
||||||
|
# Monkey-Patch socket module for HTTP requests
|
||||||
|
monkey.patch_socket()
|
||||||
|
|
||||||
|
start_time = time.time()
|
||||||
|
|
||||||
|
pool = Pool(NUM_WORKERS)
|
||||||
|
for address in WEBSITE_LIST:
|
||||||
|
pool.spawn(check_website, address)
|
||||||
|
|
||||||
|
# Wait for stuff to finish
|
||||||
|
pool.join()
|
||||||
|
|
||||||
|
end_time = time.time()
|
||||||
|
|
||||||
|
print("Time for GreenSquirrel: %ssecs" % (end_time - start_time))
|
||||||
|
g
|
34
Concurrence_examples/threads_with_queues.py
Normal file
34
Concurrence_examples/threads_with_queues.py
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
import time
|
||||||
|
from queue import Queue
|
||||||
|
from threading import Thread
|
||||||
|
|
||||||
|
NUM_WORKERS = 4
|
||||||
|
task_queue = Queue()
|
||||||
|
|
||||||
|
def worker():
|
||||||
|
# Constantly check the queue for addresses
|
||||||
|
while True:
|
||||||
|
address = task_queue.get()
|
||||||
|
run_function(address)
|
||||||
|
|
||||||
|
# Mark the processed task as done
|
||||||
|
task_queue.task_done()
|
||||||
|
|
||||||
|
start_time = time.time()
|
||||||
|
|
||||||
|
# Create the worker threads
|
||||||
|
threads = [Thread(target=worker) for _ in range(NUM_WORKERS)]
|
||||||
|
|
||||||
|
# Add the websites to the task queue
|
||||||
|
[task_queue.put(item) for item in SOME_LIST]
|
||||||
|
|
||||||
|
# Start all the workers
|
||||||
|
[thread.start() for thread in threads]
|
||||||
|
|
||||||
|
# Wait for all the tasks in the queue to be processed
|
||||||
|
task_queue.join()
|
||||||
|
|
||||||
|
|
||||||
|
end_time = time.time()
|
||||||
|
|
||||||
|
print("Time: %ssecs" % (end_time - start_time))
|
Loading…
Add table
Add a link
Reference in a new issue