Multithreading Testing using Pythons’ Low Level _threading

  • 时间:2020-10-11 15:25:20
  • 分类:网络文摘
  • 阅读:126 次

In Python, we can use _threading to launch a thread easily using the _thread.start_new_thread procedure. For example,

1
2
3
4
5
6
7
import _thread
 
def thread_proc(threadId, value):
  print(threadId, value)
 
_thread.start_new_thread( thread_proc, ("Thread-1", "a Number") )
_thread.start_new_thread( thread_proc, ("Thread-2", "a Number") )
import _thread

def thread_proc(threadId, value):
  print(threadId, value)

_thread.start_new_thread( thread_proc, ("Thread-1", "a Number") )
_thread.start_new_thread( thread_proc, ("Thread-2", "a Number") )

Unfortunately, the above threads may not finish (and be aborted) before the main script is terminated. Because we are not synchronize the threads yet. We can however, do an easy trick:

1
2
while True:
  pass
while True:
  pass

This endless loop will allow all threads to forcibly joining but the script hangs until we Ctrl+C or kill it. We can use the threading module but that requires us to write a Thread class that inherits the threading.Thread.

We can uset the threading.Event() to join the threads. For example:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import _thread
import threading
 
def thread_proc(evt, threadId, value):
  evt.set()
  print(threadId, value)
 
evt1 = threading.Event()
evt2 = threading.Event()
 
_thread.start_new_thread( thread_proc, (evt1, "Thread-1", "a Number") )
_thread.start_new_thread( thread_proc, (evt2, "Thread-2", "a Number") )
 
evt1.wait()
evt2.wait()
import _thread
import threading

def thread_proc(evt, threadId, value):
  evt.set()
  print(threadId, value)

evt1 = threading.Event()
evt2 = threading.Event()

_thread.start_new_thread( thread_proc, (evt1, "Thread-1", "a Number") )
_thread.start_new_thread( thread_proc, (evt2, "Thread-2", "a Number") )

evt1.wait()
evt2.wait()

Multithreading Requests to API Server using Python’s _threading Module

Let’s launch 100 threads that sends concurrent requests to a Steem API Node. And we need to store the threading.Event() in an array so that we can join all threads.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import _thread
import threading
import json
import requests
from random import randrange
 
def worker(evt, threadName, block):
  data = {"jsonrpc":"2.0", "method":"condenser_api.get_block", "params":[block], "id":1}
  r = requests.post(url="https://api.steemit.com",json=data)
  rjson = r.json()
  result = rjson["result"]
  print(threadName, len(result["transactions"]))
  evt.set()
      
try:
  threads = []
  for i in range(100):
    evt = threading.Event()
    threads.append(evt)
    _thread.start_new_thread( worker, (evt, "Thead-" + str(i), randrange(1, 40000000)) )
  for i in threads:
    i.wait()
except:
  print("Error2")   
import _thread
import threading
import json
import requests
from random import randrange

def worker(evt, threadName, block):
  data = {"jsonrpc":"2.0", "method":"condenser_api.get_block", "params":[block], "id":1}
  r = requests.post(url="https://api.steemit.com",json=data)
  rjson = r.json()
  result = rjson["result"]
  print(threadName, len(result["transactions"]))
  evt.set()
      
try:
  threads = []
  for i in range(100):
    evt = threading.Event()
    threads.append(evt)
    _thread.start_new_thread( worker, (evt, "Thead-" + str(i), randrange(1, 40000000)) )
  for i in threads:
    i.wait()
except:
  print("Error2")   

As expected, it will show the following:

Thead-28 18
Thead-24 12
Thead-61 5
Thead-36 21
Thead-34 45
Thead-35 40
Thead-56 26
Thead-91 3
Thead-12 2
Thead-60 33
Thead-14 17
Thead-39 0
Thead-2 36
Thead-81 42
Thead-41 17
Thead-69 0
Thead-17 30
Thead-45 33
Thead-53 3
Thead-89 16
Thead-51 0
Thead-26 2
Thead-15 55
Thead-47 33
Thead-66 0
Thead-18 21
...
...

I have also tried other nodes, and the result seems to me that all nodes can handle multiple requests at the same time from the same origin.

–EOF (The Ultimate Computing & Technology Blog) —

推荐阅读:
7 Common Email List Building Mistakes  How to Do Email Marketing in 2020: A Beginner’s Guide  5 Music Blogs That Are Rocking It And How To Get Your Own Band F  Depth First Search Algorithm with Hash Set to Find Elements in a  Algorithms to Count How Many Numbers Are Smaller Than the Curren  Finding the Closest Divisors  Greedy Solution to Reconstruct a 2-Row Binary Matrix  How to Use jOOQ Library to Write SQL in Java using Fluent Style?  Algorithm to Compute the Number of Days Between Two Dates  How to Sort Integers by The Number of 1 Bits? 
评论列表
添加评论