Compare commits

...

1 Commits

Author SHA1 Message Date
Jordon Bedwell
0e40c74e8a Add the initial parallel stuff. 2016-09-21 16:50:12 -05:00
5 changed files with 137 additions and 17 deletions

View File

@@ -38,4 +38,5 @@ Gem::Specification.new do |s|
s.add_runtime_dependency('jekyll-sass-converter', '~> 1.0')
s.add_runtime_dependency('jekyll-watch', '~> 1.1')
s.add_runtime_dependency("pathutil", "~> 0.9")
s.add_runtime_dependency("parallel", "~> 1.9")
end

View File

@@ -32,6 +32,9 @@ require "kramdown"
require "colorator"
SafeYAML::OPTIONS[:suppress_warnings] = true
ENV["PARALLEL_UNITS"] ||= Pathutil.new("/proc/cpuinfo").read
.scan(/^processor\s+:\s+\d/m).size.to_s
module Jekyll
# internal requires

View File

@@ -32,11 +32,50 @@ module Jekyll
categories_from_path(collection.relative_directory)
end
data.default_proc = proc do |_, key|
site.frontmatter_defaults.find(relative_path, collection.label, key)
data.default_proc = ddp
trigger_hooks(:post_init)
end
def ddp
return proc do |_, key|
@site.frontmatter_defaults.find(
relative_path, @collection.label, key
)
end
end
def restore_state(site, collection)
@site = site
@collection = collection
@data["excerpt"] = Excerpt.new(
self
)
end
def marshal_dump
@data.default_proc = nil; @data["excerpt"] = nil
blacklist = [:@site, :@collection, :@to_liquid]
Jekyll.logger.debug "Skipping the marshal of vars #{
blacklist
}."
(instance_variables - blacklist).each_with_object({}) do |var, obj|
Jekyll.logger.debug "Marshaling the variable #{var} in Document"
obj[var] = instance_variable_get(
var
)
end
end
def marshal_load(data)
data.each do |k, v|
instance_variable_set(
k, v
)
end
trigger_hooks(:post_init)
@data.default_proc = ddp
self
end
# Fetch the Document's data.

View File

@@ -44,12 +44,58 @@ module Jekyll
process(name)
read_yaml(File.join(base, dir), name)
data.default_proc = ddp
data.default_proc = proc do |_, key|
site.frontmatter_defaults.find(File.join(dir, name), type, key)
Jekyll::Hooks.trigger :pages,
:post_init, self
end
def ddp
proc do |_, key|
@site.frontmatter_defaults.find(
File.join(@dir, @name), type, key
)
end
end
def marshal
Marshal.dump(
self
)
end
def restore_state(site)
@site = site
end
def marshal_dump
@data.default_proc = nil
blacklist = [
:@site, :@_renderer
]
Jekyll.logger.debug "Skipping the marshal of vars #{
blacklist
}."
(instance_variables - blacklist).each_with_object({}) do |var, obj|
Jekyll.logger.debug "Marshaling the variable #{var} in Document"
obj[var] = instance_variable_get(
var
)
end
end
def marshal_load(data)
data.each do |k, v|
instance_variable_set(
k, v
)
end
Jekyll::Hooks.trigger :pages, :post_init, self
@data.
default_proc = ddp
self
end
# The generated directory into which the page will be placed

View File

@@ -1,4 +1,5 @@
# encoding: UTF-8
require "parallel"
require "csv"
module Jekyll
@@ -162,14 +163,15 @@ module Jekyll
def read
reader.read
limit_posts!
Jekyll::Hooks.trigger :site, :post_read, self
Jekyll::Hooks.trigger :site,
:post_read, self
end
# Run each of the Generators.
#
# Returns nothing.
def generate
generators.each do |generator|
Parallel.each(generators, :in_processes => ENV["PARALLEL_UNITS"].to_i) do |generator|
start = Time.now
generator.generate(self)
Jekyll.logger.debug "Generating:",
@@ -208,11 +210,17 @@ module Jekyll
#
# Returns nothing.
def write
each_site_file do |item|
item.write(dest) if regenerator.regenerate?(item)
Parallel.each(each_site_file, :in_process => ENV["PARALLEL_UNITS"].to_i) do |item|
if regenerator.regenerate?(item)
item.write(
dest
)
end
end
regenerator.write_metadata
Jekyll::Hooks.trigger :site, :post_write, self
Jekyll::Hooks.trigger :site,
:post_write, self
end
def posts
@@ -328,6 +336,7 @@ module Jekyll
end
def each_site_file
return [pages, static_files, docs_to_write].flatten.to_enum unless block_given?
%w(pages static_files docs_to_write).each do |type|
send(type).each do |item|
yield item
@@ -451,23 +460,45 @@ module Jekyll
private
def render_docs(payload)
collections.each do |_, collection|
collection.docs.each do |document|
collection.docs = Parallel.map(collection.docs, :in_processes => ENV["PARALLEL_UNITS"].to_i) do |document|
if regenerator.regenerate?(document)
document.output = Jekyll::Renderer.new(self, document, payload).run
document.trigger_hooks(:post_render)
document.trigger_hooks(
:post_render
)
end
document
end
collection.docs.map do |doc|
doc.restore_state(
self, collection
)
end
end
end
private
def render_pages(payload)
pages.flatten.each do |page|
if regenerator.regenerate?(page)
page.output = Jekyll::Renderer.new(self, page, payload).run
page.trigger_hooks(:post_render)
begin
@pages = Parallel.map(pages.flatten, :in_processes => ENV["PARALLEL_UNITS"].to_i) do |page|
if regenerator.regenerate?(page)
page.output = Jekyll::Renderer.new(self, page, payload).run
page.trigger_hooks(
:post_render
)
end
page
end
end
pages.map do |page|
page.restore_state(
self
)
end
end
end
end