-
Notifications
You must be signed in to change notification settings - Fork 0
/
threadify.js
108 lines (52 loc) · 2.03 KB
/
threadify.js
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
////////////////////////////////////////////////////////////////////////////////
// Variable
////////////////////////////////////////////////////////////////////////////////
var hummus = require('hummus'),
fs = require('fs'),
cp = require('child_process'),
path = require('path'),
outputFiles = [],
ranges = [];
////////////////////////////////////////////////////////////////////////////////
// Function
////////////////////////////////////////////////////////////////////////////////
create_outputFiles = function( outputFiles, dir, threads ){
for( var i = 0; i < threads; i++ ){
outputFiles.push( dir + `${i}.pdf` );
}
}
create_ranges = function( threads, pages ){
half_range = Math.floor( pages / threads );
for( var i = 0; i < threads; i++ ){
ranges.push( i * half_range );
}
for( var i = 1; i < threads; i++ ){
ranges.push( ranges[i]-1 );
}
ranges.push( pages -1 );
}
launcher = function( outputFolder, inputFile, threads, callback ){
var exit = 0;
for( var i = 0; i < threads; i++ ){
var parent = cp.fork("split_pdf_thread.js",
[inputFile, outputFiles[i], ranges[i], ranges[i+threads], outputFolder]);
parent.on('message', message => {
console.log( 'child says: ' + message );
callback( ++exit );
});
}
}
////////////////////////////////////////////////////////////////////////////////
// module
////////////////////////////////////////////////////////////////////////////////
module.exports = function( inputFile, outputFolder, threads, callback ){
var pages = hummus.createReader( inputFile ).getPagesCount();
create_outputFiles( outputFiles, outputFolder, threads );
console.log( outputFiles );
create_ranges( threads, pages );
console.log(ranges);
launcher( outputFolder, inputFile, threads, function(exit){
console.log('maybe we could be done' );
if(exit == 4 ) callback();
});
}