Multithreading Testing using Pythons’ Low Level _threading

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

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) —

推荐阅读:
Dorsey’s 8% Twitter Layoff  Finding Out Which Content Is Unacceptable For Your Website  The Custom Sort String Algorithm with Count and Write  Algorithms to Count the Number of Palindromic Substrings  Depth First Search Algorithm to Find Leaves of a Binary Tree  Understanding The Math Before Investing In Stocks  Don’t Owe A Thing: Tips for Bloggers Filing Taxes  The Quirky Quad Targets Millennials  Social Media, FOMO and Teenage Anxiety  Yee’s Appeal Dismissed 
评论列表
添加评论