I have character array just like 'XOOOXOX' and I need to rearrange this array-like 'XXXOOOO'. I can create simple python code for this. But I am find a way to do it using multithreading. Can anyone help me to do this?
Asked
Active
Viewed 110 times
1
-
1Why do you need multithreading? – Balaji Ambresh Jun 02 '20 at 17:49
-
1I just try to rearrange this by using multithreading. Is that possible? – Madhushani Hewagama Jun 02 '20 at 17:50
-
Do you have to use a literally sorting algorithm or can you just use python's basics? – emremrah Jun 02 '20 at 17:55
-
yeah, but how can I apply multithreading? can you give some coding example – Madhushani Hewagama Jun 02 '20 at 18:01
-
_Can anyone help me to do this?_ What specifically is the issue? Please see [ask], [help/on-topic]. – AMC Jun 03 '20 at 02:25
1 Answers
3
This might be a funny answer, but the question was about using threads. So I just created a dummy threading work. This might won't show a performance gain at all:
import random
import threading
a = random.choices(['X', 'O'], k=10000)
a = ''.join(a)
print(a.count('X'), a.count('O'))
thread_count = 4
lock = threading.Lock()
x_count = 0
o_count = 0
def chunk_it(seq, num):
avg = len(seq) / float(num)
out = []
last = 0.0
while last < len(seq):
out.append(seq[int(last):int(last + avg)])
last += avg
return out
def d(i):
global x_count
global o_count
data_part = chunk_it(a, thread_count)[i]
with lock:
x_count += data_part.count('X')
o_count += data_part.count('O')
ts = []
for i in range(thread_count):
t = threading.Thread(target=d, args=(i, ))
ts.append(t)
for t in ts:
t.start()
for t in ts:
t.join()
a = 'X' * x_count + 'O' * o_count
print(a)
print(a.count('X'), a.count('O'))
You can copy and try it.
This demo meant to show using a relatively lower level threading api.
Concurrency in python led by several modules: threading
, multiprocessing
, concurrent.futures
, asyncio
and so. You definitely might want to check out these. Diving right into official documentations might be difficult for this concept. You should read from others and practice.

emremrah
- 1,733
- 13
- 19
-
You're missing a few characters since you're doing a floor divide for the part size. Secondly, your locking is wrong. Could you please fix it? – Balaji Ambresh Jun 02 '20 at 18:16
-
Yes, I'm aware of the character missing situation. I just wanted to show the concept. I fixed the locking issue, thank you for pointing it out. – emremrah Jun 02 '20 at 18:20
-
Okay, the issue was with the total length of the array. If it couldn't divide by number of threads, this situation occurs. Just fixed it by adding a function, `chunkIt`, to divide array equally into total length of threads. Credidts for the function: https://stackoverflow.com/a/2130035/6402099 – emremrah Jun 02 '20 at 18:31