Bom dia malta!
 
	como o titulo diz, preciso de ajuda a incorporar um trabalho que fiz no ano passado(em grupo de 5!!!!), que contem uma database de bancos e as suas accoes na bolsa, e tem funcoes de comprar e vender acoes, com a materia deste ano, que é de sockets.
 
	já fiz o servidor a aceitar ligacoes multithreading, mas, vou ser muito honesto galera, não percebo p**** disto! sockets até sou bom, mas agora threading é mesmo chines.....
 
	o que eu tenho:
 
	trabalho do ano passado:
 
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import random
from multiprocessing import Process, Value, Array, Lock, Manager
from ctypes import c_char_p
#Dicionário com nome da ação como key e quantidade, abertura e cotação atual
#como value
stock_var_data_in = {'Altri': [10000, 4.3910, 4.3910],
                    'BCP': [10000, 0.2312, 0.2312],
                    'Corticeira Amorim': [10000, 12.2500, 12.2500],
                    'CTT': [10000, 5.5480, 5.5480],
                    'EDP': [10000, 3.2840, 3.2840],
                    'EDP Renovaveis': [10000, 6.9910, 6.9910],
                    'Galp Energia': [10000, 13.7850, 13.7850],
                    'Ibersol': [10000, 14.9000, 14.9000],
                    'Jeronimo Martins': [10000, 17.5600, 17.5600],
                    'Mota-Engil': [10000, 2.7340, 2.7340],
                    'NOS': [10000, 5.5150, 5.5150],
                    'Novabase': [10000, 3.2390, 3.2390],
                    'Pharol': [10000, 0.2690, 0.2690],
                    'REN': [10000, 2.8680, 2.8680],
                    'Semapa': [10000, 16.7000, 16.7000],
                    'Sonae Capital': [10000, 0.8740, 0.8740],
                    'Sonae SGPS': [10000, 0.9260, 0.9260],
                    'Navigator': [10000, 4.0720, 4.0720],
                    'Montepio UP': [10000, 0.7470, 0.7470]}
lista_acoes_suspensas = Array(c_char_p, len(stock_var_data_in))
index = Value ("i", 0) #índice da lista_acoes_suspensas
suspensas = False #Flag para sinalizar ações suspensas
mutex = Lock()
m = Manager()
stock_var_data = m.dict()
#Inicialização do dicionário partilhado
for j in stock_var_data_in.keys():
    stock_var_data[j] = stock_var_data_in[j]
print("\nDicionário partilhado com os valores iniciais:\n")
#print stock_var_data
for item in stock_var_data.items():
    print (item)
print("\nOrdens dadas:\n")
def transaction(i, stock_dict):
    orders = 0
    while orders < 10: # variacao positiva ou negativa 10% da cotacao da accao.
        mutex.acquire()
        #Escolher ação a comprar
        stock_name = random.choice(stock_var_data_in.keys())
        if stock_name in lista_acoes_suspensas:
            print(i, stock_name + " não pode ser negociada, está suspensa.\n")
            mutex.release()
            continue
        else:
            orders += 1
            stock_quantity = random.randint(1,500)
            quote = stock_dict[stock_name] #value da key 'stock_name'
            #Escolher a cotação de compra ou venda (+-1% da cotação atual)
            stock_value = round(random.uniform((0.99 * quote[2]),
                                (1.01 * quote[2])),4)
            if stock_value - quote[2] >= 0: #Simulação de Compra
                print("%s, ordem %d: Compra de %d ações da %s a %g euros.") \
                 % (i, orders, stock_quantity, stock_name, stock_value)
                sq_upd = stock_dict[stock_name][0] - stock_quantity
                stock_dict[stock_name] = [sq_upd, stock_dict[stock_name][1],
                                            stock_value]
            else: #Simulação de Venda
                print("%s, ordem %d: Venda de %d ações da %s a %g euros.") \
                        % (i, orders, stock_quantity, stock_name, stock_value)
                sq_upd = stock_dict[stock_name][0] + stock_quantity
                stock_dict[stock_name] = [sq_upd, stock_dict[stock_name][1],
                                            stock_value]
            #Acções a negociar acima ou abaixo de 10% da abertura?
            if stock_value/quote[1] > 1.10 or stock_value/quote[1] < 0.9:
                print("\nVariação de " + \
                        str(round((stock_value/quote[1]-1)*100, 2)) + "%." + \
                        " CMVM suspendeu a %s.\n" % stock_name)
                lista_acoes_suspensas[index.value] = stock_name
                index.value += 1
                #print "CMVM suspendeu a %s." % stock_name
        mutex.release()
Banco1 = Process(target=transaction, args=('Banco1', stock_var_data,))
Banco2 = Process(target=transaction, args=('Banco2', stock_var_data,))
Banco3 = Process(target=transaction, args=('Banco3', stock_var_data,))
Banco1.start()
Banco2.start()
Banco3.start()
Banco1.join()
Banco2.join()
Banco3.join()
print("\nDicionário partilhado atualizado no final das 30 ordens:\n")
for item in stock_var_data.items():
    print (item)
print("\nLista de ações suspensas na sessão:\n")
for i in lista_acoes_suspensas:
    if str(i) != 'None':
        print(i + ",",)
        suspensas = True
if not suspensas: print("Não houve acões suspensas na sessão.")
print("\n\nPrograma Terminado.\n")
	o meu servidor multithreading:
 
	 
 
import socket
import sys
from _thread import *
host = ""
port = 8000
serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print("Socket Created")
try:
	serversocket.bind((host, port))
except socket.error as e:
	print(str(e))
	sys.exit()
print("Socket has been bounded")
serversocket.listen(10)
print("Socket is ready")
print("Server online and listening")
def client_thread(conn):
	welcome = "Welcome to the server. Type something and hit enter \n"
	conn.send(welcome.encode())
	while True:
		data = conn.recv(1024)
		reply = "OK." + data.decode()
		if not data:
			break;
		print(reply)
		conn.sendall(data)
	conn.close()
while 1:
	conn, addr = serversocket.accept()
	print("Connected with " + addr[0] + ":" + str(addr[1]))
	start_new_thread(client_thread, (conn, ))
serversocket.close()
	preciso de juntar os dois, para depois fazer um cliente onde possa chamar as funcoes comprar, vender e ver balanco.
 
	acham que me conseguem ajudar? não percebo  nada disto
 
	 
 
	edit: o trabalho do ano passado foi dado em python 2, eu já estive a tentar fazer a conversao mas sem sucesso.