0

Running my multiprocessing script while using the getpass function in python (import getpass): and I keep getting this error message. I am also running this code in a .py file on my command prompt terminal, using windows 10 as well.

error message

The following is my code:

import time
import multiprocessing
from multiprocessing import Pool
from multiprocessing import freeze_support
import getpass
import jaydebeapi
import pandas as pd
import numpy as np
from multiprocessing import Process, freeze_support, set_start_method


class multiprocess:
    def __init__(self):
        pass

    def test(self, Batch_test):
        pw_2 = getpass.getpass(prompt="Password", stream=False)

        
        PML = jaydebeapi.connect('com.ibm.db2.jcc.DB2Driver', 'jdbc:db2://he3qlxvtdbs957.fhlmc.com:50001/PMLFDB2',
                                 ['f408195', pw_2], 'C:/JDBC/db2jcc.jar')
        

        PML = PML.cursor()

        Batch_query = "select id_hstrcl_data_bch_load_frst_evnt as btch_strt, id_hstrcl_data_bch_load_last_evnt as btch_end from UDBADM.hstrcl_data_bch_load WHERE ID_HSTRCL_DATA_BCH_LOAD BETWEEN 1 and 2"

        PML.execute(Batch_query)
        Batch_records = PML.fetchall()
        Batch_records = pd.DataFrame(Batch_records)

        for ind in Batch_test:
            print(ind)
            
            first_evnt = Batch_records.iloc[ind, 0]
            last_evnt = Batch_records.iloc[ind, 1]
            PML_loan_Query = "select CAST(b.id_lpa_alt_loan AS INT) AS id_lpa_alt_loan from udbadm.pml_lst_cmpltd_trans_mtch a join udbadm.lpa_altv_loan_idtn b on a.id_evnt = b.id_evnt where b.cd_lpa_alt_loan_idtn = 'HewlettPackardGeneratedTransaction' and a.id_evnt between ? and ?"
            PML.execute(PML_loan_Query, (first_evnt, last_evnt))
            loan_records = PML.fetchall()
        

        return loan_records

    def run(self):
        processes = []

        for i in range(2):
            p = multiprocessing.Process(target=self.test, args=(i,))
            processes.append(p)

        for p in processes:
            p.start()


if __name__ == '__main__':
    a = multiprocess()
    a.run()
Richard
  • 1
  • 1
  • I think you just want to call `getpass()` in the parent process and store the value somewhere it can be referred to in the child processes. E.g. as a member variable of `multiprocesss` – Sam Mason Feb 08 '23 at 09:17

0 Answers0