1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
U
­ý°dZã@s˜dZddlmZddlmZddlmZddlZddl    Z    ddl
Z ddl
m Z ddl mZe    j d¡Zdd    „Ze    jjd
d „ƒZd d „Ze    jjdd„ƒZdS)zd
Tests multithreading behaviour for reading and
parsing files for each parser defined in parsers.py
é)Ú    ExitStack)ÚBytesIO)Ú
ThreadPoolN)Ú    DataFrameZ pyarrow_skipcCs\ttj |d¡tdƒd}d|d<d|d<d|d<tjd|dd    |d
<tj|d d |d <|S)z¸
    Construct a DataFrame for testing.
 
    Parameters
    ----------
    num_rows : int
        The number of rows for our DataFrame.
 
    Returns
    -------
    df : DataFrame
    éZabcde)ÚcolumnsZfooÚbarZbazz20000101 09:00:00Ús)ZperiodsÚfreqÚdateÚint64)ZdtypeÚint)rÚnpÚrandomZrandÚlistÚpdZ
date_rangeZarange)Únum_rowsÚdf©rú_d:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\pandas/tests/io/parser/test_multi_thread.pyÚ_construct_dataframes rc        s„|}d‰d}‡fdd„t|ƒDƒ}tƒR‰‡fdd„|Dƒ}ˆ tdƒ¡}| |j|¡}|d}|D]}t ||¡qdW5QRXdS)Ni'édcs(g|] }d dd„tˆƒDƒ¡ ¡‘qS)Ú
cSs&g|]}|d›d|d›d|d›‘qS)Údú,r©Ú.0ÚirrrÚ
<listcomp>3szCtest_multi_thread_string_io_read_csv.<locals>.<listcomp>.<listcomp>)ÚjoinÚrangeÚencode)rÚ_)Ú max_row_rangerrr2sÿz8test_multi_thread_string_io_read_csv.<locals>.<listcomp>csg|]}ˆ t|ƒ¡‘qSr)Ú enter_contextr)rÚb)Ústackrrr9sér)r rr$rÚmapÚread_csvÚtmÚassert_frame_equal)    Ú all_parsersÚparserZ    num_filesZ bytes_to_dfÚfilesÚpoolÚresultsZ first_resultÚresultr)r#r&rÚ$test_multi_thread_string_io_read_csv+s
þr2c     sx‡‡fdd„}‡‡fdd„tˆƒDƒ}tˆd}| ||¡}W5QRX|dj}|dd…D]
}    ||    _q^t |¡}
|
S)    aš
    Generate a DataFrame via multi-thread.
 
    Parameters
    ----------
    parser : BaseParser
        The parser object to use for reading the data.
    path : str
        The location of the CSV file to read.
    num_rows : int
        The number of rows to read per task.
    num_tasks : int
        The number of tasks to use for reading this DataFrame.
 
    Returns
    -------
    df : DataFrame
    csB|\}}|s"ˆjˆdd|dgdSˆjˆddt|ƒd|dgdS)aj
        Create a reader for part of the CSV.
 
        Parameters
        ----------
        arg : tuple
            A tuple of the following:
 
            * start : int
                The starting row to start for parsing CSV
            * nrows : int
                The number of rows to read.
 
        Returns
        -------
        df : DataFrame
        rr )Ú    index_colÚheaderÚnrowsÚ parse_datesNéé    )r3r4Zskiprowsr5r6)r)r )ÚargÚstartr5)r-ÚpathrrÚreaderXs"ÿ
úz0_generate_multi_thread_dataframe.<locals>.readercs g|]}ˆ|ˆˆˆf‘qSrrr)rÚ    num_tasksrrrzsz4_generate_multi_thread_dataframe.<locals>.<listcomp>)Z    processesrr7N)r rr(rrÚconcat) r-r;rr=r<Ztasksr/r0r4ÚrÚfinal_dataframer)rr=r-r;rÚ _generate_multi_thread_dataframeDs" ÿ 
 
rAc    CsVd}d}|}d}t|ƒ}t |¡*}| |¡t||||ƒ}t ||¡W5QRXdS)Néi †z__thread_pool_reader__.csv)rr*Z ensure_cleanZto_csvrAr+)r,r=rr-Ú    file_namerr;r@rrrÚ)test_multi_thread_path_multipart_read_csvŠs 
ÿrD)Ú__doc__Ú
contextlibrÚiorZmultiprocessing.poolrÚnumpyrZpytestZpandasrrZpandas._testingZ_testingr*ÚmarkZ usefixturesZ
pytestmarkrZslowr2rArDrrrrÚ<module>s      
F